我读到过这个技巧:Shared assembly info in VS projects - JJameson's blog

基本上,它意味着创建一个SharedAssemblyInfo.cs提供有关程序集的版本控制信息,并将此文件作为链接添加到解决方案的所有项目,因此实际文件仅驻留在磁盘上的一个位置.

我的问题涉及两种情况:

  1. 不使用此机制的现有解决方案:有没有一种方法可以轻松地将ShareAssemblyInfo添加到所有项目中?(假设我有一个50个项目的解决方案).

  2. 创建新项目时,默认情况下会创建新的AssemblyInfo.cs.不过,我也想自动链接到SharedAssemblyInfo.

这个问题有什么解决办法吗?通常的做法是什么?

推荐答案

第一点可以通过简单的文本编辑器解决,该编辑器可以同时处理多个文件并查找/替换.只需打开里面所有的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 custom project templates 个,但我不确定它是否值得努力.您应该编写一个测试来判断这一点.这会简单得多,结果实际上几乎是一样的.

UPD:关于编写测试,根据一些自定义规则判断解决方案/项目文件.基本上,sln/csproj格式非常简单,无需付出太多努力即可解析.所以,如果你想让SharedAssemblyInfo.cs个链接到每个项目中,只需解析csproj并判断它.然后将该判断器放在构建服务器中,并在每个构建上运行它.我们目前有这样的系统在工作,编写大约需要两天的时间,但节省了我们更多的时间(我们有更复杂的规则和多解决方案项目,所以值得付出努力).

我现在不会在这里详细地写这个判断(它不是那么短),但我很快就会写一篇关于它的博客文章-最有可能写到这个周末.因此,如果您感兴趣-请很快查看my blog:)

是的.

.net相关问答推荐

Docker失败文件找不到

为什么$NULL在ForEach-Object{}和Foreach()中的行为不同?

实体框架核心:Azure容器应用程序的执行超时已过期

dotnet 8 web api在部署到docker后无法工作

Owin Twitter登录-根据验证程序远程证书无效

如何在任务栏顶部全屏显示 Windows 窗体?

如何让 DateTimePicker 显示一个空字符串?

有什么方法可以使用 .NET 应用程序使用 git 吗?

SQLParameter 如何防止 SQL 注入?

没有 @Html.Button !

.NET 的 String.Normalize 有什么作用?

C# - 你如何停止计时器?

如何从头开始以编程方式配置 log4net(无配置)

如何从其十六进制 RGB 字符串创建 System.Drawing.Color?

如何使用 EPPlus 设置 XLSX 单元格宽度?

如何使用 DateTime 指定一天中的最晚时间

将控制台输出镜像到文件

.NET 中的 java.lang.IllegalStateException?

为 webClient.DownloadFile() 设置超时

实体框架太慢了.我有哪些 Select ?