當我構建一個包含2個項目B.csproj和C.csproj的A.sln時,它具有內部項目引用,它將引發MSBuild中的引用錯誤。但是當我在MSBuild中單獨構建B.csproj和C.csproj時,它不會拋出錯誤。而且在VS IDE中構建A.sln也不會引發錯誤。我使用的是.NET 2.0框架。請在下面找到用於構建sln和projs的腳本。MSBuild使用項目引用正確地構建項目,但不是從解決方案
MSBuild "<path>/A.sln" /p:Configuration=Release /p:StartupObject="" /p:WarningLevel=4 /p:Optimize=true /t:rebuild /l:Filelogger,Microsoft.Build.Engine;logfile=F:\A.sln.log /verbosity:normal
MSBuild "<path>/B.csproj" /p:Configuration=Release /p:StartupObject="" /p:WarningLevel=4 /p:Optimize=true /t:rebuild /l:Filelogger,Microsoft.Build.Engine;logfile=F:\B.csproj.log /verbosity:normal
MSBuild "<path>/C.csproj" /p:Configuration=Release /p:StartupObject="" /p:WarningLevel=4 /p:Optimize=true /t:rebuild /l:Filelogger,Microsoft.Build.Engine;logfile=F:\C.csproj.log /verbosity:normal
編輯:
所有拋出的錯誤是從失蹤refernces碼(全部爲項目引用)。我只得到三種類型的錯誤,如下所示。
錯誤CS0012:類型'X'在沒有引用的程序集中定義爲 。 您必須添加對組件 'Y,Version = 2.0.0.0,Culture = neutral, PublicKeyToken = aad4cbe5d7c27078'的引用。
錯誤CS0234:類型或命名空間 名「:類型或命名空間 名「X」並不在 命名空間「Y」(?是否缺少 集引用)
錯誤CS0246存在X」找不到(你 缺少using指令或 集引用?)
我清除從構建路徑之前所有的DLL構建從IDE和建設的MSBuild之前。但IDE工作正常,並且在項目的「Refrences」部分中未顯示缺少參考指標。
沒有在IDE中手動添加參考路徑。
另一個更新:
我注意到,當我從溶液中打開兩個項目,引用正確的IDE指向。但是當我在IDE中單獨打開這些項目時,我在MSBuild中提到的缺少的參考文件就出現了。非常奇怪。
所以總結一下,
Buiilding .proj中的MSBuild - 好
Buiilding .proj在IDE - 錯誤
Buiilding的.sln中的MSBuild - 錯誤
Buiilding的.sln在IDE中 - 好
搭配對我來說很奇怪。非常感謝。
每當您提出問題並說出現錯誤時,確實有助於剪切並粘貼錯誤。這適用於異常,編譯器錯誤,編譯錯誤... – 2009-06-16 12:50:27
順便說一句,如果它單獨構建兩個項目沒有問題,那麼我想知道兩個項目是否需要項目引用。 OTOH,這可能是因爲最近的功能允許MSBUILD對項目參考「聰明」。因爲我從來沒有理解過這個特徵,所以我不能排除這一點。但我建議您確認是否需要所有項目參考,以及重建B是否會導致重建C. – 2009-06-16 12:54:54
@blntechie:感謝您的更新。我建議你使用Solution Explorer;按順序選擇每個引用,然後查看「屬性」窗口中的詳細信息。看到任何奇怪的東西,比如一個在obj中,另一個在bin中?另外,如果沒有參考路徑,那麼您可能不介意查看您的.csproj.user文件以確保它們確實沒有? – 2009-06-16 13:11:26