c# - .csproj 如何知道它的解决方案?

标签 c# .net 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 文件,然后你会遇到构建中断。

关于c# - .csproj 如何知道它的解决方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28196339/

相关文章:

powershell - Web.Config 在 Microsoft MSBuild 之外进行转换?

msbuild - 无法创建以 xunit 作为依赖项的 Nuget 包

c# - 停止线程C#中的声音

c# - 大数据表如何保存?

.net - 在 ASP.NET 中,当 HttpContext.Current 为 NULL 时如何获取物理文件路径?

c++ - 在 C/C++ 中创建 Windows NTFS 目录连接时出现问题

c# - 如何从后面的代码打开模式?

c# - 两个 C# 应用程序(32 位和 64 位)之间 IPC 的最佳方式是什么

c# - 如何使用 IndexOf 和 Substring 从字符串中解析文件名?

c# - 避免 CopyFilesToOutputDirectory 构建步骤