【问题标题】:Get Assembly name at compile time in Visual Studio在 Visual Studio 中编译时获取程序集名称
【发布时间】:2009-08-25 11:38:24
【问题描述】:

有没有办法在设计时从 Visual Studio 中找出程序集名称(即不使用反射或运行时 API,例如 System.Reflection.Assembly.GetEntryAssembly)?

该场景需要一个工具来获取 Visual Studio 项目最终将编译成的程序集名称。

这就像解析 .csproj 的 AssemblyName 属性 - 我想知道是否有任何 API 可以可靠地提供此信息。

请不要回复使用反射的运行时 API - 在我需要程序集名称时没有程序集文件存在 - 只是 csproj 文件中程序集的元数据。

【问题讨论】:

  • 有些人在遇到问题时会想“我知道,我会使用正则表达式”。现在他们有两个问题。
  • “有些人在遇到问题时会想“我知道,我会使用正则表达式!”现在他们有两个问题。” ——杰米·扎温斯基

标签: c# visual-studio


【解决方案1】:

如果您通过 post/pre-build 事件调用该工具,则这些数据很容易访问。

只需转到“项目属性->构建事件”选项卡,然后选择“编辑预构建”或“编辑构建后”,具体取决于您希望工具何时运行。这应该会打开一个带有有用的“宏>>”按钮的编辑窗口。按此按钮,您将获得一大堆宏供您使用,并且应该是您需要的几乎所有东西。

【讨论】:

    【解决方案2】:

    在所有 .csproj 文件只是 xml 之后,您可以使用的“API”是 LINQ to XML。 (如果需要,您可以从解决方案文件中获取 .csproj 文件的位置,由于某种原因它不是 XML,但可以轻松解析)

    【讨论】:

      【解决方案3】:

      您可以将宏中可用的“TargetName”用于构建后事件。它将为您提供项目的程序集名称。

      【讨论】:

        【解决方案4】:

        在快速浏览 MSDN 之后,我发现这篇文章可能是进一步研究的良好开端:

        Accessing Project Type Specific Project, Project Item, and Configuration Properties

        【讨论】:

          【解决方案5】:

          我认为您需要编写一些 regular expression 来为您提供 AssemblyInfo.cs 文件中“AssemblyTitle”属性的值。

          类似这样的:

          public class Assembly
          {
              public static string GetTitle (string fileFullName) {
                  var contents = File.ReadAllText (fileFullName); //may raise exception if file doesn't exist
          
                  //regex string is: AssemblyTitle\x20*\(\x20*"(?<Title>.*)"\x20*\)
                  //loading from settings because it is annoying to type it in editor
                  var reg = new Regex (Settings.Default.Expression);
                  var match = reg.Match (contents);
                  var titleGroup = match.Groups["Title"];
                  return (match.Success && titleGroup.Success) ? titleGroup.Value : String.Empty;
              }
          }
          

          【讨论】:

          • 这不是一个好主意,因为可以将程序集的标题更改为 AssemblyInfo.cs 中的程序集名称以外的任何内容,因此解析没有用。解析 AssemblyName 节点的 csproj 的正则表达式会更精确,但我总是可以将它作为 XML 文件加载并使用 .Net API 为我解析它。
          • 你是对的。我认为 Rune FS 发布的答案更有意义。
          猜你喜欢
          • 2011-05-31
          • 2011-02-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-05-15
          • 1970-01-01
          • 2011-06-18
          • 1970-01-01
          相关资源
          最近更新 更多