在Visual Studio中编译时获取程序集名称

时间:2009-08-25 11:38:24

标签: c# visual-studio

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

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

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

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

5 个答案:

答案 0 :(得分:3)

如果您通过发布/预构建活动调用该工具,则此数据非常易于访问。

只需转到“项目属性 - >构建事件”选项卡,然后选择“编辑预构建”或“编辑构建后”,具体取决于您希望工具运行的时间。这应该会显示一个编辑窗口,其中包含有用的“宏>>”按钮。按此按钮,您将获得一堆宏,并且应该是您需要的所有内容。

答案 1 :(得分:2)

在所有.csproj文件只是xml之后,您可以使用的LINQ是XML。 (如果需要,可以从解决方案文件获取.csproj文件的位置,由于某种原因,该文件不是XML,但可以很容易地解析)

答案 2 :(得分:1)

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

答案 3 :(得分:0)

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

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

答案 4 :(得分:-1)

我认为您需要编写一些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;
    }
}