2017-05-31 49 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自動跟蹤依賴鏈。

刪除這些檢查是無害的,可以讓你在緊要關頭完成,否則堅實的基礎,但如果你做,你如果正確組裝不存在風險運行時錯誤。

相關問題