这个MSBuild开始出现反弹痛苦。 我有一个引用.dll的项目,但BuildServer找不到它,我得到'无法解析此引用。无法找到程序集'
所以,我的项目将此.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 :(得分:1)
您可以将项目的位置设为锚点,并找到与MSBuildProjectDirectory
相关的所有内容。
在How can I get current directory in msbuild script?中更广泛地讨论了MSBuildProjectDirectory
属性。
答案 1 :(得分:0)
您可以在csproj文件中操作xml。
请参阅下面的第一个网址。
How to add a linked file to a csproj file with MSBuild. (3.5 Framework)
FTP Credentials for MSBuild.ExtensionPack.Communication.Ftp
最好在开发和构建环境之间保持一致。 但大多数人直到路上才想到这一点。
所以Xml-Update可能是你改变HintPath的朋友。
答案 2 :(得分: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>