【发布时间】:2015-01-28 15:40:09
【问题描述】:
在 .csproj 文件中,您可以使用 $(SolutionDir) 等变量。可以通过这种方式找到库。
如何通过 msbuild 构建 .csproj(不提供解决方案路径)?我看不出这种行为有任何意义,但它仍然有效。
【问题讨论】:
-
您要解决的问题是什么?
-
他想了解一些东西。
在 .csproj 文件中,您可以使用 $(SolutionDir) 等变量。可以通过这种方式找到库。
如何通过 msbuild 构建 .csproj(不提供解决方案路径)?我看不出这种行为有任何意义,但它仍然有效。
【问题讨论】:
单个项目文件不知道它们属于哪个解决方案。变量 $(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 文件,然后你会遇到构建中断。
【讨论】: