从.csproj中访问solutioninfo.cs和assemblyinfo.cs

时间:2009-09-10 14:21:17

标签: c# properties csproj assemblyinfo

我需要从我的.csproj文件中的solutioninfo.cs和assemblyinfo.cs访问一些信息,并将其用作属性。

使用

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

在我的csproj中:

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

有没有办法访问这些值?

2 个答案:

答案 0 :(得分:2)

在csproj文件的最后,有两个名为BeforeBuild和AfterBuild的空MSBuild目标。这两个目标或多或少地取代了构建前和构建后的事件。您可以在那里添加自己的脚本。我从SolutionInfo.cs中设置版本,例如从subversion获取后,这是通过使用MSBuild.CommunityTasks完成的:

<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的一部分。

答案 1 :(得分:1)

您可以通过Reflection和Assembly Attribute类来完成此操作。例如:

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

Console.Write(company.Company);

您可能需要添加使用System.Reflection;指令代码顶部。