我可以在csproj中为本地和TFS构建使用不同的DLL引用吗?

时间:2015-10-01 10:50:57

标签: .net visual-studio tfs tfsbuild projects-and-solutions

有没有办法在.csproj文件中指定,当我的项目是构建localy时以及在TFS上构建时使用DLL的不同引用?

我想在更多解决方案之间共享一些DLL(不想将DLL复制到每个解决方案的lib目录中)。

我的本​​地源结构如下

.\TfsProject
    .\lib
        MyShared.Dll
    .\Solution1
        .\Project1
        .\Project2
    .\Solution2
        .\Project1
        .\Project2

所有项目共享MyShared.Dll

的相对路径
<HintPath>..\..\lib\MyShared.Dll</HintPath>

我的问题出现在TFS Build服务器上,其中源结构与本地服务器不同。

我尝试更新.csproj文件以使用条件语句,在参考HintPath时使用不同的MyShared.Dll localy和TFS构建服务器。我的情况如下

<Choose>
  <!-- Local HintPath -->
  <When Condition="'$(SourceDir)' == ''">
    <ItemGroup>
      <Reference ...>
        <HintPath>..\..\lib\MyShared.Dll</HintPath>
      </Reference>
    </ItemGroup>
  </When>
  <!-- TFS Specific HintPath -->
  <Otherwise>
    <ItemGroup>
      <Reference ...>
        <HintPath>$(SourceDir)\..\_build\lib\MyShared.Dll</HintPath>
      </Reference>
    </ItemGroup>
  </Otherwise>
</Choose>

Localy构建传递,但我在TFS构建时遇到The type or namespace name could not be found错误,因为它找不到MyShared.Dll

任何想法我该如何解决这个问题?谢谢!

2 个答案:

答案 0 :(得分:1)

我会为TFS Build配置工作区映射以匹配您在本地拥有的内容,因此相对路径可以在构建服务器上正确解析。

答案 1 :(得分:1)

通过指定$(MSBuildProjectDirectory)并调整HintPath而不是$(SourceDir)来解决我的问题。似乎构建服务器无法将$(SourceDir)识别为.csproj中的有效变量。

可用构建变量列表:

https://msdn.microsoft.com/en-us/library/ms164309(v=vs.120).aspx

这个问题也有帮助:

List of MSBuild built-in variables