.net .csproj如何知道它的解决方案?

igsr9ssn  于 2023-05-08  发布在  .NET
关注(0)|答案(1)|浏览(144)

.csproj文件中,可以使用像$(SolutionDir)这样的变量。这样就可以找到图书馆。
如何通过msbuild构建.csproj(不给出解决方案路径)?我看不出这种行为有什么意义,但它起作用了。

jgovgodb

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

相关问题