【问题标题】:How to set the output path of several visual C# projects如何设置几个可视化C#项目的输出路径
【发布时间】:2009-03-07 07:02:07
【问题描述】:

我有一个包含多个 c# 项目的解决方案,我希望能够在一个地方同时设置所有项目的输出路径和其他属性。属性表 (vsprops) 似乎无法用于 C# 项目,并且 $(SolutionDir) 变量被忽略。还有其他方法可以跨多个 C# 项目设置属性吗?

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

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

【问题讨论】:

  • 第三颗子弹真的救了我一天。感谢您在此处发布此信息。

标签: c# visual-studio


【解决方案1】:

一个 csproj 文件已经是一个 msbuild 文件,这意味着 csproj 文件也可以使用如 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 中构建解决方案时设置。

【讨论】:

  • 值得一提的是 $(SolutionDir) 不能从 Visual Studio UI 中设置,而是使用文本编辑器。请参阅@paul 编辑。
  • 另外值得一提的是,对于您在 common.proj 中设置的每个属性,您还必须从包含它的文件中删除。
【解决方案2】:

不幸的是,这些信息(例如输出路径)都存储在单独的 *.csproj 文件中。如果您想批量更新一大堆这些文件,则必须恢复使用某种文本更新工具或创建一个脚本来处理每个文件。

对于这样的事情(一次对一堆文本文件应用更改)我个人使用 Helios Software 的 WildEdit - 就像一个魅力,而且价格合理。

但我敢肯定,那里也有大量免费的替代品。

【讨论】:

  • 也可以使用喜欢的文本编辑器进行简单的搜索和替换。
  • @CJohnson:如果您有一个、两个甚至五个文件要处理 - 是的。如果您有 150、250 或更多 - 不再那么多了.....
【解决方案3】:

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

我个人会推荐 NAnt。

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

【讨论】:

  • MSBuild 是您应该使用的。我第二次使用 MSBuild。另一方面,NAnt 自 2012 年以来就没有更新过,看起来已经死了。
【解决方案4】:

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

用于数百个可能非常乏味的项目。这就是为什么我写了一个工具来帮助解决这个问题:

https://github.com/chris1248/MsbuildRefactor

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-12
    • 2010-11-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多