【问题标题】:How can .csproj know about its solution?.csproj 如何知道它的解决方案?
【发布时间】:2015-01-28 15:40:09
【问题描述】:

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

如何通过 msbuild 构建 .csproj(不提供解决方案路径)?我看不出这种行为有任何意义,但它仍然有效。

【问题讨论】:

  • 您要解决的问题是什么?
  • 他想了解一些东西。

标签: c# .net msbuild csproj


【解决方案1】:

单个项目文件知道它们属于哪个解决方案。变量 $(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 文件,然后你会遇到构建中断。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多