2009-09-10 37 views
0

我需要在我的.csproj文件中訪問我的solutioninfo.cs和assemblyinfo.cs中的一些信息,並將其用作屬性。從.csproj中訪問solutioninfo.cs和assemblyinfo.cs

使用

// my solutioninfo.cs  
[assembly: AssemblyCompany("MyCompany")] 

值在我的csproj:

// my .csproj 
<PublisherName>MyCompany</PublisherName> 

是否有訪問值的方法嗎?

+0

也許我的描述不清楚:我需要* info.cs文件中的信息。我不想更新它們。我想使用我的.csproj文件中的信息。 – crauscher 2009-09-10 15:06:45

回答

1

您可以通過Reflection和AssemblyAttribute類來完成此操作。例如:

AssemblyCompanyAttribute company = 
(AssemblyCompanyAttribute)AssemblyCompanyAttribute.GetCustomAttribute(System.Reflection.Assembly.GetExecutingAssembly() , typeof 
    (AssemblyCompanyAttribute)); 

Console.Write(company.Company); 

您可能需要添加一個using System.Reflection;指令到您的代碼的頂部。

+2

我的.csproj文件是一個xml配置文件。 - >沒有反射 – crauscher 2009-09-10 14:35:16

2

在csproj文件的最後,有兩個空的MSBuild目標,稱爲BeforeBuild和AfterBuild。這兩個目標或多或少地取代了構建前和構建後的事件。你可以在那裏添加你自己的腳本。我從顛覆,這是通過使用MSBuild.CommunityTasks完成得到它後,設置在SolutionInfo.cs的版本,例如:

<Target Name="BeforeBuild"> 
    <FileUpdate 
    Files="$(SolutionInfoFile)" 
    Regex="(?&lt;ver&gt;assembly: AssemblyVersion\(&quot;).*&quot;" 
    ReplacementText="${ver}$(Major).$(Minor).$(Build).$(Revision)&quot;" /> 
    <FileUpdate 
    Files="$(SolutionInfoFile)" 
    Regex="(?&lt;ver&gt;assembly: AssemblyFileVersion\(&quot;).*&quot;" 
    ReplacementText="${ver}$(Major).$(Minor).$(Build).$(Revision)&quot;" /> 
    <FileUpdate 
    Files="$(SolutionInfoFile)" 
    Regex="(?&lt;ver&gt;assembly: AssemblyInformationalVersion\(&quot;).*&quot;" 
    ReplacementText="${ver}$(Major).$(Minor).$(Build)&quot;" /> 
</Target> 

AFAIR的FileUpdate任務正則表達式也CommunityTasks的一部分。

+0

我會推薦這種方法,您可以通過命令行向構建提供屬性,或直接將它們添加到您的項目。然後使用預生成來更新* .cs文件以包含該信息。我認爲這會比其他方式容易得多。 – 2009-09-10 16:47:12