我的问题涉及2种情况:
- 不使用此机制的现有解决方案:是否有一种简便的方法将ShareAssemblyInfo添加到所有项目中? (假设我有一个包含50个项目的解决方案。)
- 创建新项目时,默认情况下会创建新的AssemblyInfo.cs。但是我也想自动链接到SharedAssemblyInfo。
在VS 2010中,可以将共享的程序集信息文件链接起来。Ashish Jain在他的博客文章中介绍了这个功能:Sharing assembly version across projects in a solution。
在解决方案级别创建共享的程序集信息文件后,按照以下步骤将其链接到项目中:
右键单击想要添加共享程序集文件的项目,选择添加 -> 现有项...
从解决方案文件夹中选择文件“SharedAssemblyInfo.cs”。
不要选择添加,点击“添加为链接”旁边的箭头
将添加的链接文件与同一文件夹中的AssemblyInfo.cs并排拖动。
对于所有需要添加共享程序集文件的项目,重复执行步骤1-4。
我已经尝试过这个方法,它是可行的。
第一个问题可以通过使用能够同时处理多个文件并进行查找/替换的简单文本编辑器来解决。只需将所有csproj文件都打开,并将字符串<Compile Include="Properties\AssemblyInfo.cs" />
替换为
<Compile Include="..\SharedAssemblyInfo.cs">
<Link>Properties\SharedAssemblyInfo.cs</Link>
</Compile>
或者你可以编写一个类似于这样的实用工具:
var files = Directory.GetFiles(yourSolutionDir, "*.csproj", SearchOption.AllDirectories);
foreach (var f in files) {
string contents = File.ReadAllText(f);
string result = contents.Replace("<Compile Include=\"Properties\\AssemblyInfo.cs\" />", putSecondStringHere_ItIsJustTooLong); // :)
File.WriteAllText(f, contents);
}
至于第二个问题……你可以查看Visual Studio自定义项目模板,但我不确定它是否值得这样做。我认为你应该编写测试来检查它。这样会更简单,而且结果实际上几乎相同。
更新:关于编写用于检查解决方案/项目文件是否符合一些自定义规则的测试。基本上,sln/csproj格式足够简单,可以轻松解析。因此,如果您想将SharedAssemblyInfo.cs链接到每个项目中,只需解析csproj并进行检查即可。然后将该检查器放在构建服务器中,并在每次构建时运行它。我们目前正在使用这样的系统,编写它大约需要两天的时间,但节省了我们更多时间(我们有更复杂的规则和多解决方案项目,所以它值得这样做)。
我现在不会详细介绍此检查(它不是很短),但我打算很快写一篇博客文章——最可能是在本周末之前。因此,如果您感兴趣,请尽快查看我的博客 :)
更新:在这里。
这种方法不适用于同时包含 C# 和 F# 项目的解决方案。C# 项目无法引用共享的 F# 文件,反之亦然。
在这种情况下,唯一的选择是创建一个单独的项目,并从其他项目中引用它。
我已经创建了一个应用程序,可以自动递增文件版本。
C:\temp\IncrementFileVersion.exe $(SolutionDir)\Properties\AssemblyInfo.cs 构建项目 为了保持简单,如果出现错误,该应用程序仅会抛出消息。要确认它正常工作,您需要在“程序集信息”中检查文件版本。
注意:您必须重新加载 Visual Studio 中的解决方案,才能使“程序集信息”按钮填充字段,但您的输出文件将具有更新的版本。
如有建议和请求,请发送电子邮件至 telson_alva@yahoo.com