【发布时间】:2020-03-30 06:11:58
【问题描述】:
我正在实施一个新的解决方案,它依赖于许多“仅内容”NuGet 包。其中包括一些我需要参考的程序集和 dacpacs。
我的意图是创建一个 SDK 样式的 csproj,它使用 PackageReference 元素引用所有包。然后我计划使用 Directory.Build.Props 为我的解决方案中的所有其他项目提供对该项目的引用,以便首先构建它(并且我的所有依赖项都将在构建开始时可用)。
这行得通,但是在我添加 sqlproj 来使用 dacpacs 时,我开始遇到麻烦(我已经在我的解决方案中添加了一些 SDK 样式的 csproj 文件,这些文件都按我的预期工作)。
当让 sqlproj 文件引用 SDK 样式的 csproj 文件时,我发现 Visual Studio 会在启动时挂起(一个已知的错误记录在 here)。
然后我尝试用传统的 csproj 文件替换这个项目。下面我有来自我的 Directory.Build.Props 的 sn-ps,我试图自动创建从我的 csproj 和 sqproj 到我负责恢复 NuGet 包的项目的引用。
由于 NuGet.Restore 项目(现在是传统的 csproj 获得循环引用,因为它似乎不符合条件),因此以下操作失败:-
<ItemGroup Condition=" '$(MSBuildProjectName)'!='NuGet.Restore' ">
<ProjectReference Include="$(MSBuildThisFileDirectory)NuGet.Restore.csproj" />
</ItemGroup>
以下解决了循环引用,但 sqlproj 无法在 Visual Studio 中加载,并出现错误“无法修改源自导入文件的评估对象”:-
<Choose>
<When Condition=" '$(MSBuildProjectName)'!='NuGet.Restore' ">
<ItemGroup>
<ProjectReference Include="$(MSBuildThisFileDirectory)NuGet.Restore.csproj" />
</ItemGroup>
</When>
</Choose>
有没有其他方法可以通过弯曲 Directory.Build.props 使从 sqlproj 到 csproj(传统或 SDK 样式)的引用与 MSBuild 和 Visual Studio一起使用?
据我所知,确保 MSBuild 将首先运行我的恢复项目的唯一方法是让其他所有项目都引用它。
我正在接近唯一可行的选择是拥有一个单独的预构建脚本,必须手动运行该脚本以在运行我们的解决方案构建之前检索 NuGet 包(我一直希望避免这种情况)。
【问题讨论】:
标签: .net visual-studio msbuild nuget csproj