2014-01-10 109 views
2

這個MSBuild開始成爲一個集會的痛苦。 我得到了一個引用.dll的項目,但BuildServer沒有找到它,我得到'無法解析此引用。找不到程序集'MSBuild在Build中更改參考路徑?

因此,我的項目將此dll作爲位於d:\ common \ DllPath \ mydll.dll之類的項目中引用,並且在項目文件mycsproj.csproj中將其稱爲HintPath .. \。 。\ .. \ .. \ .. \ .. \ .. \ DllPath \ mydll.dll

因此,當我在工作站上構建它時,如果我在構建服務器上使用VS2012打開它,那麼一切正常。 (在服務器上,路徑實際上也是D:\但這只是一個巧合。)

但是,當我嘗試將其構建爲構建定義時,它失敗。它看起來像它建立在C:\ Builds \ 43 \ Myapp,並且我猜「SearchPath」{HintPathFromItem}「考慮」時.. \ .. \ .. \ .. \ .. \ .. \ .. \ DllPath \ mydll.dll「,但它不存在。」在日誌中,它嘗試在c:文件夾中查找.dll。

我怎樣才能讓它指向'正確'的相對目錄?對我來說,它和項目本身是一樣的分區。
它是否在Build-definitions中,還是我必須更改.csproj文件中的某些內容? (在.csproj中它已經是一個相對路徑,我不想改變它)。

+0

「這個MSBuild開始成爲一個集會的痛苦。」在我遇到這種情況時,你可能做錯了。像這樣的HintPaths正在尋求問題。因此,要麼確保服務器上的目錄結構相同,要麼使用屬性/環境變量正確配置提示路徑(有點像mockinterface的答案)。 – stijn

+0

我們在dev和Build環境中得到完全相同的結構。 –

回答

0

您可以在csproj文件中操縱xml。

查看下面的第一個URL。

How to add a linked file to a csproj file with MSBuild. (3.5 Framework)

FTP Credentials for MSBuild.ExtensionPack.Communication.Ftp

最好是有你的開發之間是一致的東西,並建立環境。 但是大多數人在下路之前都不會去想這件事。

因此,Xml更新可能是你的朋友改變HintPath。

+0

Thnx,我會看看那個。 (實際上,我們在開發環境和構建環境中得到了完全相同的結構,都指向D..TFS.Procect ..等等) –

+0

然後,另一個建議是有一個「getter」將文件拉到相對位置目錄中的構建腳本。基本上,下載文件和他們在正確的相對目錄。這些文件可以存在於源代碼控制中,但更爲流行的方式是處理像nuget這樣的二進制存儲庫。 – granadaCoder

0

查看並點擊Wolf5對這個問題的回答here

目錄結構很可能具有比工作目錄低一級的項目文件。這是我的項目通常如何。解決方法是在您的項目文件中添加一個額外的HintPath,並使用MsBuild所需的任何路徑。例如我在我的項目中有這個:

<Reference Include="Blah.Namespace.Path.SomeReference, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL"> 
    <SpecificVersion>False</SpecificVersion> 
    <HintPath Condition="Exists('..\..\..\..\..\Dir1\Dir2\Dir3\bin\Debug\SomeReference.dll')">..\..\..\..\..\Dir1\Dir2\Dir3\bin\Debug\SomeReference.dll</HintPath> 
    <HintPath Condition="Exists('..\..\..\..\Dir1\Dir2\Dir3\bin\Debug\SomeReference.dll')">..\..\..\..\Dir1\Dir2\Dir3\bin\Debug\SomeReference.dll</HintPath> 
    <Private>True</Private> 
</Reference>