是否有使用 Directory.Build.Props 从 csproj 项目引用 sqlproj 项目的正确方法?
Is there a correct way to reference a sqlproj project from a csproj project using Directory.Build.Props?
我正在实施一个新的解决方案,它依赖于许多 "content only" NuGet 包。其中包括一些我需要参考的程序集和 dacpacs。
我的意图是拥有一个 SDK 样式的 csproj,它使用 PackageReference 元素引用所有包。然后我计划使用 Directory.Build.Props 为我的解决方案中的所有其他项目提供对该项目的引用,以便首先构建它(并且我的所有依赖项都将在构建开始时可用)。
这行得通,但在我添加 sqlproj 来使用 dacpac 时,我开始遇到麻烦(我已经在我的解决方案中添加了一些 SDK 样式的 csproj 文件,它们都按我预期的那样工作)。
当有一个 sqlproj 文件引用一个 SDK 样式的 csproj 文件时,我发现 Visual Studio 会在启动时挂起(一个已知错误记录在 here)。
然后我尝试用传统的 csproj 文件替换这个项目。下面是我 Directory.Build.Props 的片段,我曾尝试自动创建从我的 csproj 和 sqproj 到负责恢复 NuGet 包的项目的引用。
以下无法工作,因为 NuGet.Restore 项目(现在是传统的 csproj,因为它似乎不符合条件而获得循环引用):-
<ItemGroup Condition=" '$(MSBuildProjectName)'!='NuGet.Restore' ">
<ProjectReference Include="$(MSBuildThisFileDirectory)NuGet.Restore.csproj" />
</ItemGroup>
以下解决了循环引用,但 sqlproj 无法在 Visual Studio 中加载,错误为 "Cannot modify an evaluated object originating in an imported file":-
<Choose>
<When Condition=" '$(MSBuildProjectName)'!='NuGet.Restore' ">
<ItemGroup>
<ProjectReference Include="$(MSBuildThisFileDirectory)NuGet.Restore.csproj" />
</ItemGroup>
</When>
</Choose>
有没有其他方法可以使从 sqlproj 到 csproj(传统或 SDK 样式)的引用与 MSBuild and Visual Studio 一起工作通过弯曲 Directory.Build.props?
据我所知,唯一能确保 MSBuild 运行 我的还原项目的唯一方法是让所有其他项目引用它。
我正在接近唯一可行的选择是拥有一个单独的预构建脚本,该脚本必须手动 运行 在 运行 构建我们的解决方案之前检索 NuGet 包(我一直希望避免的)。
我有一个解决方法/解决方案,将我的还原项目保留为传统的 csproj。我已经修改了条件,因此它排除了 sqlproj 项目,然后将对我的 NuGet 还原的引用手动添加到每个 sqlproj 文件:-
<Choose>
<When Condition=" '$(MSBuildProjectName)'!='NuGet.Restore' AND '$(MSBuildProjectExtension)'!='.sqlproj' ">
<ItemGroup>
<ProjectReference Include="$(MSBuildThisFileDirectory)NuGet.Restore.csproj" />
</ItemGroup>
</When>
</Choose>
(这可能并不适合所有人,但由于我们不希望在未来添加任何其他 sqlproj 项目,因此希望不会给我们带来任何维护问题!)
我正在实施一个新的解决方案,它依赖于许多 "content only" NuGet 包。其中包括一些我需要参考的程序集和 dacpacs。
我的意图是拥有一个 SDK 样式的 csproj,它使用 PackageReference 元素引用所有包。然后我计划使用 Directory.Build.Props 为我的解决方案中的所有其他项目提供对该项目的引用,以便首先构建它(并且我的所有依赖项都将在构建开始时可用)。
这行得通,但在我添加 sqlproj 来使用 dacpac 时,我开始遇到麻烦(我已经在我的解决方案中添加了一些 SDK 样式的 csproj 文件,它们都按我预期的那样工作)。
当有一个 sqlproj 文件引用一个 SDK 样式的 csproj 文件时,我发现 Visual Studio 会在启动时挂起(一个已知错误记录在 here)。
然后我尝试用传统的 csproj 文件替换这个项目。下面是我 Directory.Build.Props 的片段,我曾尝试自动创建从我的 csproj 和 sqproj 到负责恢复 NuGet 包的项目的引用。
以下无法工作,因为 NuGet.Restore 项目(现在是传统的 csproj,因为它似乎不符合条件而获得循环引用):-
<ItemGroup Condition=" '$(MSBuildProjectName)'!='NuGet.Restore' ">
<ProjectReference Include="$(MSBuildThisFileDirectory)NuGet.Restore.csproj" />
</ItemGroup>
以下解决了循环引用,但 sqlproj 无法在 Visual Studio 中加载,错误为 "Cannot modify an evaluated object originating in an imported file":-
<Choose>
<When Condition=" '$(MSBuildProjectName)'!='NuGet.Restore' ">
<ItemGroup>
<ProjectReference Include="$(MSBuildThisFileDirectory)NuGet.Restore.csproj" />
</ItemGroup>
</When>
</Choose>
有没有其他方法可以使从 sqlproj 到 csproj(传统或 SDK 样式)的引用与 MSBuild and Visual Studio 一起工作通过弯曲 Directory.Build.props?
据我所知,唯一能确保 MSBuild 运行 我的还原项目的唯一方法是让所有其他项目引用它。
我正在接近唯一可行的选择是拥有一个单独的预构建脚本,该脚本必须手动 运行 在 运行 构建我们的解决方案之前检索 NuGet 包(我一直希望避免的)。
我有一个解决方法/解决方案,将我的还原项目保留为传统的 csproj。我已经修改了条件,因此它排除了 sqlproj 项目,然后将对我的 NuGet 还原的引用手动添加到每个 sqlproj 文件:-
<Choose>
<When Condition=" '$(MSBuildProjectName)'!='NuGet.Restore' AND '$(MSBuildProjectExtension)'!='.sqlproj' ">
<ItemGroup>
<ProjectReference Include="$(MSBuildThisFileDirectory)NuGet.Restore.csproj" />
</ItemGroup>
</When>
</Choose>
(这可能并不适合所有人,但由于我们不希望在未来添加任何其他 sqlproj 项目,因此希望不会给我们带来任何维护问题!)