2017-05-31 76 views
1

我正在使用多个解决方案处理项目。我最近在我的一个解决方案中添加了对Nuget包的参考。这导致了一些版本冲突,所以我更新了所有解决方案中的x版本。现在,在其中起了冲突解决方案,我可以看到下面的线已被添加更新nuget pacakge将错误条件添加到csproj

<Import Project="..\packages\X.3.3.2.0\build\X.props" Condition="Exists('..\packages\X.3.3.2.0\build\X.props')" /> 

<Error Condition="!Exists('..\packages\X.3.3.2.0\build\X.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\X.3.3.2.0\build\X.props'))" /> 

有谁知道为什么这个被添加的,哪些是这些线的意义是什么?

回答

1

NuGet包可以通过在build文件夹中有.props和/或.targets文件,将消耗项目的构建逻辑添加到消耗项目中。

当安装到“经典”csproj文件(packages.config方法)时,NuGet将这些语句添加到csproj文件以包含此逻辑。这实际上取决于包装。一些设置在构建过程中使用的值,一些添加复制到构建输出的内容文件以及一些添加自定义构建步骤(变换等)。

<Import … />元素消耗逻辑文件,并具有防止文件丢失的条件 - 例如,当NuGet包尚未恢复时(新鲜克隆/检出,构建服务器)。如果Condition未检查文件是否存在,则项目文件可能无法在VS中加载。

如果此文件不存在,<Error … />元素会发出错误消息,以便在项目加载完成后VS将显示错误。

0

问题是由于VS不能很好地管理nuget包而造成的。如果移动或重新排列项目位置,则可能必须手动更正项目文件中的路径。另外,确保项目A包的路径实际上并不指向项目B包目录。我在项目文件中看到了由无效路径导致的nuget包的许多问题。

此外,直接回答你的问题,我相信你看到一个错误条件检查,原因是因为它是由一个NuGet包添加。添加大多数nuget软件包不会触发此项检查被添加到您的项目文件,只有nuget软件包依赖于其他nuget软件包。 (例如,一些依赖像Newtonsoft.Json这样的常用软件包可能会添加这行代码以确保存在正确的版本)

我认为(但我不确定)这是由软件包控制的作者设置了一个标志或其他东西,而不是VS自动跟踪依赖链。

删除这些检查是无害的,可以让你在紧要关头完成,否则坚实的基础,但如果你做,你如果正确组装不存在风险运行时错误。

相关问题