Вы можете выполнить поиск и заменить Regex на рукописный C #, Script, powershell или аналогичный. Но у него есть следующие проблемы:
- Сложно читать (прочтите красивое регулярное выражение через три или более месяцев)
- Сложно улучшить (новое регулярное выражение для новой функции поиска / замены / проверки)
- Легко сломать (новый выпуск / формат проекта сборки 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;
}
}
person
Fab
schedule
17.10.2015
Microsoft.Build.Evaluation
, чтобы написать инструмент, например C # для этого. - person stijn   schedule 10.10.2015