如何设置几个可视化C#项目的输出路径

时间:2009-03-07 07:02:07

标签: c# visual-studio

我有一个包含几个c#项目的解决方案,我希望能够在一个地方将所有项目的输出路径和其他属性设置在一起。 Property Sheets(vsprops)似乎不能用于C#项目,$(SolutionDir)变量被忽略。是否有其他方法可以在多个C#项目中设置属性?

更新 按照Bas Bossink的回答中的信息,我能够通过创建一个通用的csproj并将其导入到单个项目中来设置多个项目的输出路径。其他几点:

  • 在Visual Studio中构建时,如果对公共项目进行了更改,则必须触摸/重新加载引用它的任何项目,以便获取更改。
  • 在单个项目中也设置的任何属性都将覆盖公共属性。
  • 通过Visual Studio UI将$(SolutionDir)设置为输出路径不能按预期工作,因为该值被视为字符串文字而不是扩展。但是,使用文本编辑器将$(SolutionDir)直接设置到csproj文件中可以正常工作。

4 个答案:

答案 0 :(得分:38)

csproj文件已经是一个msbuild文件,这意味着csproj文件也可以使用here所述的import元素。导入元素是 正是你需要的。您可以创建一个包含以下内容的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中构建解决方案时将设置它。

答案 1 :(得分:1)

不幸的是,输出路径等这些信息都存储在各个* .csproj文件中。如果你想批量更新其中的一大堆,你将不得不恢复某种文本更新工具或创建一个脚本来触摸每个文件。

对于这样的事情(同时对一堆文本文件应用更改)我亲自使用Helios Software的WildEdit - 像魅力一样工作,而且价格合理。

但我确信那里也有大量的免费替代品。

答案 2 :(得分:0)

我建议您使用MSBuildNAnt之类的构建工具,这样可以为您的构建提供更大的灵活性。基本上,我们的想法是使用(在大多数情况下)单个可配置的构建文件来启动构建。

我个人推荐NAnt。

你可以在JP Boodhoo的博客上找到关于NAnt的精彩教程here

答案 3 :(得分:0)

在公共属性表中设置$(OutputPath)属性。然后在要对其影响的所有项目文件中删除该条目。然后将该属性表导入到所有项目中。

对于数百个非常繁琐的项目。这就是为什么我写了一个工具来帮助解决这个问题:

https://github.com/chris1248/MsbuildRefactor