在.csproj文件中,您可以使用$(SolutionDir)等变量。可以通过这种方式找到库。
你怎么可能通过msbuild构建.csproj(不给它解决方案路径)?我无法在这种行为中看到任何意义,但它无论如何都在工作。
答案 0 :(得分:8)
单个项目文件不了解他们所属的解决方案。变量$(SolutionDir),$(SolutionPath),$(SolutionExt)等,仅在构建.sln文件时定义,在直接构建项目时不会定义它们。
为了说明这一点,请将其放在项目文件中:
<Target Name="BeforeBuild">
<Message Text="SolutionDir=$(SolutionDir)" />
</Target>
当你构建解决方案时,你会得到这个:
>msbuild sln.sln
Microsoft (R) Build Engine version 12.0.31101.0
...
BeforeBuild:
SolutionDir=e:\temp\sln\
...
直接构建项目时,您可以获得:
>msbuild fs\fs.fsproj
Microsoft (R) Build Engine version 12.0.31101.0
...
BeforeBuild:
SolutionDir=*Undefined*
...
正如您所看到的,$(SolutionDir)严重受损。我不推荐使用它,以及其他$(Solution ***)变量,因为您希望在某些时候直接构建项目,或者在其他目录中创建具有项目的不同子集的新.sln文件,然后你会遇到构建中断。