MSBuild在Build中更改参考路径?

时间:2014-01-10 14:03:17

标签: msbuild

这个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中它已经是一个相对路径,我不想改变它。)

3 个答案:

答案 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>