有没有办法在Visual Studio中找到设计时的程序集名称(即不使用反射或运行时API,如System.Reflection.Assembly.GetEntryAssembly)?
该场景需要一个工具来获取Visual Studio项目最终将编译成的程序集名称。
这就像解析.csproj的AssemblyName属性一样 - 我想知道是否有任何API可以可靠地提供这些信息。
请不要回复使用反射的运行时API - 当我需要程序集名称时没有汇编文件 - 只是csproj文件中程序集的元数据。
答案 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;
}
}