我有一个包含多个 C# 项目的解决方案,我希望能够在一个地方一起设置所有项目的输出路径和其他属性。属性表 (vsprops) 似乎无法用于 C# 项目,$(SolutionDir) 变量被忽略。是否有任何其他方法可以跨多个 C# 项目设置属性?
更新 按照 Bas Bossink 的回答中的信息,我能够通过创建一个通用的 csproj 并将其导入到单个项目中来设置多个项目的输出路径。其他几点:
- 在 Visual Studio 中构建时,如果对公共(public)项目进行了更改,则有必要触摸/重新加载任何引用它的项目,以使更改生效。
- 在单个项目中设置的任何属性都将覆盖通用属性。
- 通过 Visual Studio UI 将 $(SolutionDir) 设置为输出路径无法按预期工作,因为该值被视为字符串文字而不是展开。但是,使用文本编辑器将 $(SolutionDir) 直接设置到 csproj 文件中会按预期工作。
最佳答案
csproj 文件已经是一个 msbuild 文件,这意味着 csproj 文件也可以使用 import 元素,如所述 here .导入元素是 正是您所需要的。您可以创建一个 Common.proj,其中包含如下内容:
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="3.5"xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<OutputPath>$(SolutionDir)output</OutputPath>
<WarningLevel>4</WarningLevel>
<UseVSHostingProcess>false</UseVSHostingProcess>
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
</PropertyGroup>
</Project>
您可以在每个 csprojs 中导入此 Common.proj,例如:
<Import Project="..\Common.proj" />
import 语句应该在任何依赖于 Common.proj 中定义的属性的任务之前
希望对您有所帮助。我无法用我多次使用的 $(SolutionDir) 变量来确认你的问题。但是我确实知道,当您通过命令行在解决方案中包含的特定项目上运行 msbuild 命令时,不会设置此变量。它将在您在 Visual Studio 中构建解决方案时设置。
关于c# - 如何设置几个visual C#项目的输出路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/621461/