#xml #visual-studio-2010 #projects-and-solutions #linq-to-xml #csproj
#xml #visual-studio-2010 #проекты и решения #linq-to-xml #csproj
Вопрос:
У меня есть исходный код Entlib 5.0, и мне нужно подписать все сборки, используя мой собственный ключ (файл snk).
Проще всего было бы открыть файл решения EnterpriseLibrary.2010 в Visual Studio 2010 и для каждого проекта выбрать Свойства-> Подписание, затем выбрать Подписать сборку и, наконец, выбрать ключевой файл.
Но я не хочу делать это вручную, тогда я мог бы написать скрипт для ручного редактирования файлов проекта и вставить следующее в конец текущего списка PropertyGroups
:
<PropertyGroup>
<SignAssembly>true</SignAssembly>
</PropertyGroup>
<PropertyGroup>
<AssemblyOriginatorKeyFile>keyFile.snk</AssemblyOriginatorKeyFile>
</PropertyGroup>
Любой вспомогательный класс на C # или скриптинг, если бы было лучше сделать это простым и быстрым способом?
Комментарии:
1. Почему бы не написать программу на C #, использующую класс XDocument ?
Ответ №1:
Вы можете взглянуть на Microsoft.Build.Ссылка на MSDN пространства имен BuildEngine
Пример кода:
Engine eng = new Engine()
Project proj = new Project(eng);
proj.Load(FullProjectPath);
proj.SetProperty("SignAssembly", "true");
proj.Save(FullProjectPath);
Недавно я использовал нечто подобное, чтобы внести ряд изменений во все файлы .csproj моей компании (более 200) вместо того, чтобы вручную открывать каждый проект и вносить изменения.
Надеюсь, это поможет.
Комментарии:
1. конечно, когда я использовал его, я написал консольное приложение, которое просматривало наш исходный каталог и собирало все файлы .csproj, а затем вносило необходимые изменения. Вам просто нужно добавить ссылку на Microsoft.Build. Движок и Microsoft.Build. Фреймворк
2. Знаете ли вы, доступна ли часть csproj «Событие после сборки» через эту библиотеку? Я немного порылся. Но пока не нашел его. Спасибо. И «Проголосовать» за этот ответ.
3. конечно, вы должны быть в состоянии сделать что-то вроде Target postBuild = proj . Цели [«AfterBuild»]; предполагая, что это не было прокомментировано в файле проекта. Я копался около 5 секунд и не видел, как добавить цель, если она не существует, но я знаю, что это можно сделать. Кроме того, это пространство имен устарело, и вам может повезти с его заменой.
4. Движок устарел, и люди должны использовать Microsoft.Build. Оценка… единственная проблема с оценкой — это целевая платформа. Если вы используете .netstandard, он будет нацелен на более старую платформу, которая может выдавать ошибки. Единственное решение — использовать средство чтения и записи xml.
5. Microsoft.Build. Движок не работает и Microsoft.Build. Оценка отсутствует. Любая другая библиотека для настройки движка и объекта проекта?
Ответ №2:
Как некоторые отметили, другой ответ, что движок теперь устарел, и люди должны использовать Microsoft.Build.Оценка однако оценка, если вы используете .netstandard, будет нацелена на более старую платформу, которая может выдавать ошибки.
Другой вариант — вызвать этот инструмент dotnet:
https://www.nuget.org/packages/dotnet-property
dotnet property "**/Project.csproj" AssemblyOriginatorKeyFile:"keyFile.snk"
Последним вариантом было бы сделать это во время сборки (без инструмента)
dotnet build /p:AssemblyOriginatorKeyFile=keyFile.snk