手書きの C#、スクリプト、powershell などを使用して、正規表現の検索と置換を行うことができます。しかし、以下の問題があります。
- 読みにくい(きれいな正規表現を 3 か月以上かけて読む)
- 拡張が困難(新しい検索/置換/チェック機能の新しい正規表現)
- 壊れやすい(ms ビルド プロジェクトの新しいリリース/形式または予測されないタグが機能しない可能性があります)
- テストが困難(意図しない一致が発生しないことを確認する必要があります)
- 維持するのが難しい(上記のため)
次の利点があります。
- あらゆる種類のプロジェクト (モノラルまたはビジュアル) で動作させる (可能性がある)追加の検証を行いません。
- 気にしません\r :)
最善の方法は、Microsoft.Build.Evaluationを使用して、
すべてのテスト/チェック/修正などを行う C# ツールをビルドすることです。
ソースファイルリスト(Monoで使用)を使用し、 csprojのソースを更新するコマンドラインツールと、csprojのコンテンツをコンソールにダンプする別のコマンドラインツールを作成しました。簡単に実行でき、非常に簡単で、テストも簡単でした。
ただし、「非」Ms ツール (Mono Studio など) によって変更されたプロジェクト、または\rがないために失敗する可能性があります (私が経験したように) 。良いメッセージ。
Microsoft.Build.dll を使用したサンプルを次に示します (廃止されているため、Microsof.Build.Engine は使用しないでください)。
using System;
using Microsoft.Build.Evaluation;
internal class Program
{
private static void Main(string[] args)
{
var project = new Project("PathToYourProject.csproj");
Console.WriteLine(project.GetProperty("TargetFrameworkVersion", true, string.Empty));
Console.WriteLine(project.GetProperty("Platform", true, string.Empty));
Console.WriteLine(project.GetProperty("WarningLevel", true, string.Empty));
Console.WriteLine(project.GetProperty("TreatWarningsAsErrors", true, "false"));
Console.WriteLine(project.GetProperty("OutputPath", false, string.Empty));
Console.WriteLine(project.GetProperty("SignAssembly", true, "false"));
Console.WriteLine(project.GetProperty("AssemblyName", false, string.Empty));
Console.ReadLine();
}
}
public static class ProjectExtensions
{
public static string GetProperty(this Project project, string propertyName, bool afterEvaluation, string defaultValue)
{
var property = project.GetProperty(propertyName);
if (property != null)
{
if (afterEvaluation)
return property.EvaluatedValue;
return property.UnevaluatedValue;
}
return defaultValue;
}
}