有没有办法在.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
。
任何想法我该如何解决这个问题?谢谢!
答案 0 :(得分:1)
我会为TFS Build配置工作区映射以匹配您在本地拥有的内容,因此相对路径可以在构建服务器上正确解析。
答案 1 :(得分:1)
通过指定$(MSBuildProjectDirectory)
并调整HintPath
而不是$(SourceDir)
来解决我的问题。似乎构建服务器无法将$(SourceDir)
识别为.csproj中的有效变量。
可用构建变量列表:
https://msdn.microsoft.com/en-us/library/ms164309(v=vs.120).aspx
这个问题也有帮助: