在.csproj文件中,可以使用像$(SolutionDir)这样的变量。这样就可以找到图书馆。如何通过msbuild构建.csproj(不给出解决方案路径)?我看不出这种行为有什么意义,但它起作用了。
.csproj
$(SolutionDir)
msbuild
jgovgodb1#
单个项目文件不知道它们属于哪个解决方案。变量$(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文件,然后你会遇到构建中断。
1条答案
按热度按时间jgovgodb1#
单个项目文件不知道它们属于哪个解决方案。变量$(SolutionDir)、$(SolutionPath)、$(SolutionExt)等仅在构建.sln文件时定义,而不会在直接构建项目时定义。
要说明这一点,请将以下内容放在项目文件中:
当你构建解决方案时,你会得到:
当你直接构建你的项目时,你会得到:
如您所见,$(SolutionDir)严重损坏。我不建议使用它,沿着其他$(Solution***)变量,因为你会想在某个时候直接构建项目,或者在其他目录中创建新的.sln文件,然后你会遇到构建中断。