更新nuget pacakge将错误条件添加到csproj

时间:2017-05-31 16:57:58

标签: visual-studio visual-studio-2015 nuget nuget-package

我正在开发一个包含多种解决方案的项目。我最近在我的一个解决方案中添加了对Nuget包的引用。这导致了一些版本冲突,因此我在所有解决方案中更新了x的版本。现在在存在冲突的解决方案中,我可以看到已添加以下行

TRANSFORM Min(OrderedList.City) AS MinOfCity
SELECT OrderedList.Customer
FROM (SELECT CustomerCities.Customer, CustomerCities.City, Count(1) AS CityNo
FROM CustomerCities INNER JOIN CustomerCities AS CustomerCities_1 ON CustomerCities.Customer = CustomerCities_1.Customer
WHERE (((CustomerCities.City)>=[CustomerCities_1].[City]))
GROUP BY CustomerCities.Customer, CustomerCities.City) OrderedList
GROUP BY OrderedList.Customer
PIVOT "CITY" & [CityNo];

有谁知道为什么会添加这些内容以及这些内容的意义是什么?

2 个答案:

答案 0 :(得分:2)

NuGet包可以通过在.props文件夹中包含.targets和/或build文件来为使用项目添加构建逻辑。

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

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

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

答案 1 :(得分:1)

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

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

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

删除这些检查是无害的,并且允许您在夹点中完成其他可靠的构建,但是如果这样做,如果没有正确的程序集,则存在运行时错误。