2009-08-25 131 views
2

有沒有辦法在Visual Studio中的設計時(即不使用反射或運行時API如System.Reflection.Assembly.GetEntryAssembly)找到程序集名稱?在Visual Studio中編譯時獲取程序集名稱

該場景需要一個工具來獲取Visual Studio項目最終編譯到的程序集名稱。

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

請不要使用反射的運行時API迴應 - 當我需要程序集名稱時,不存在程序集文件 - 只是程序集的元數據在csproj文件中。

+0

有些人在遇到問題時會想:「我知道,我會用正則表達式。」現在他們有兩個問題。 – Hemant 2009-08-25 11:41:13

+3

「有些人在遇到問題時,認爲 」我知道,我會用正則表達式!「現在他們有兩個問題。」--Jamie Zawinski – TheVillageIdiot 2009-08-25 11:50:09

回答

2

的「API」你在所有.csproj文件只是xml之後,可以使用的是LINQ to XML。 (如果您需要從解決方案文件中獲取該文件(由於某些原因,該文件不是XML,但可以輕鬆解析),則可以獲取.csproj文件的位置)

-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; 
    } 
} 
+0

這不是一個好主意,因爲可以改變標題程序集是AssemblyInfo.cs中的程序集名稱以外的任何東西,因此解析無用。 解析AssemblyName節點的csproj的正則表達式會更加精確,但隨後我可以始終將其作爲XML文件加載並使用.Net API爲我解析它。 – bhavinb 2009-08-25 12:13:57

+0

你說得對。我認爲Rune FS發佈的答案更有意義。 – Hemant 2009-08-25 12:20:56

3

如果您通過後期/預生成事件調用該工具,這些數據非常容易訪問。

只需進入「項目屬性 - >構建事件」選項卡,然後選擇「編輯預構建」或「編輯構建後」,具體取決於何時運行該工具。這應該帶來一個編輯窗口,其中包含有用的「宏>>」按鈕。按下這個按鈕,你將得到一堆宏使用,應該幾乎是你需要的一切。

1

您可以使用宏中的「TargetName」用於生成後事件。它會給你你的項目的程序集名稱。

相關問題