我需要从我的.csproj文件中的solutioninfo.cs和assemblyinfo.cs访问一些信息,并将其用作属性。
使用
的值// my solutioninfo.cs
[assembly: AssemblyCompany("MyCompany")]
在我的csproj中:
// my .csproj
<PublisherName>MyCompany</PublisherName>
有没有办法访问这些值?
答案 0 :(得分:2)
在csproj文件的最后,有两个名为BeforeBuild和AfterBuild的空MSBuild目标。这两个目标或多或少地取代了构建前和构建后的事件。您可以在那里添加自己的脚本。我从SolutionInfo.cs中设置版本,例如从subversion获取后,这是通过使用MSBuild.CommunityTasks完成的:
<Target Name="BeforeBuild">
<FileUpdate
Files="$(SolutionInfoFile)"
Regex="(?<ver>assembly: AssemblyVersion\(").*""
ReplacementText="${ver}$(Major).$(Minor).$(Build).$(Revision)"" />
<FileUpdate
Files="$(SolutionInfoFile)"
Regex="(?<ver>assembly: AssemblyFileVersion\(").*""
ReplacementText="${ver}$(Major).$(Minor).$(Build).$(Revision)"" />
<FileUpdate
Files="$(SolutionInfoFile)"
Regex="(?<ver>assembly: AssemblyInformationalVersion\(").*""
ReplacementText="${ver}$(Major).$(Minor).$(Build)"" />
</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;指令代码顶部。