.csproj如何知道其解决方案?

时间:2015-01-28 15:40:09

标签: c# .net msbuild csproj

在.csproj文件中,您可以使用$(SolutionDir)等变量。可以通过这种方式找到库。

你怎么可能通过msbuild构建.csproj(不给它解决方案路径)?我无法在这种行为中看到任何意义,但它无论如何都在工作。

1 个答案:

答案 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文件,然后你会遇到构建中断。