MoonLight,
Это возможно, однако, не совсем простое решение. У вас есть несколько вариантов.
Должен отметить, что ответить на ваш вопрос. Невозможно изменить информацию о сборке во время простой копии. Информация о сборке «сваривается» в сборку и не изменяется.
Вариант 1:
Если это вообще возможно, я хотел бы сделать это до того, как assemby был построен. Обычно это можно сделать с помощью информации SharedAssembly, которую вы можете перемещать по своему приложению. В этом случае вы «можете» использовать предварительную сборку «Событие» для копирования информации SharedAssembly в целевой каталог. Путь SharedAssembly довольно прост и описан здесь. http://blogs.msdn.com/b/jjameson/archive/2009/04/03/shared-assembly-info-in-visual-studio-projects.aspx Он использует процесс связанных файлов между вашими проектами решений, предоставляя все или частичную информацию о сборке (или все) для ваших проектов. В этом случае вы можете использовать событие предварительной сборки, чтобы сделать xcopy
предпочтительной информации SharedAssembly, связывая, таким образом, новую информацию о сборке. Теперь, чтобы сделать этот процесс целым, я бы сделал это.
- Создать папку с решением проблем.
- Создайте файл SharedAssemblyInfo.cs в корневом каталоге решения и укажите общие атрибуты.
- Добавьте файл SharedAssemblyInfo.cs в каждое решение, для которого вы хотите настроить таргетинг.
- Создайте файл SharedAssembly2.cs с новой информацией, которую вы хотите иметь в новой цели.
- Напишите ваши предварительно построить события для резервного копирования файла SharedAssemblyInfo.cs, переместите SharedAssebly2.cs к месту SharedAssemblyInfo.cs
- Написать событие после сборки повторно instante файл SharedAssemblyInfo.cs. Что-то вроде.
Предварительная сборка.
xcopy /Y $(SolutionDir)SharedAssemblyInfo.cs $(SolutionDir)SharedAssemblyInfo.bak
xcopy /Y $(SolutionDir)SharedAssembly2.cs $(SolutionDir)SharedAssemblyInfo.cs
после сборки
xcopy /Y $(SolutionDir)SharedAssemblyInfo.bak $(SolutionDir)SharedAssemblyInfo.cs
Вариант 2:
Существует пакет из рамок Mono, что "может" сделать это. Однако это намного сложнее, кроме того, этот пакет изменяет только определение сборки, а не Win32Resources, которые видны при просмотре вкладки Свойства файла -> details.
Использование пакета Моно.Сесил на Nuget это возможно. Здесь вы можете изменить \ добавить атрибуты сборки, имена и т. Д.
Вот образец, чтобы изменить некоторые атрибуты (обратите внимание, что есть много больше и лучше всего использовать ваш отладчик и просматривать доступные атрибуты).
static void Main(string[] args)
{
if (args.Length != 2)
{
Console.Error.WriteLine("Expected arguments: <Assembly-Path> <New-Assembly-Path>");
Environment.Exit(1);
}
var assemblyPath = args[0];
var newAssemblyPath = args[1];
var assemblyDef = AssemblyDefinition.ReadAssembly(assemblyPath);
Console.WriteLine("Loaded assembly " + assemblyDef);
assemblyDef.Name.Name = "New Name";
assemblyDef.MainModule.Name = "new Name";
assemblyDef.Name.Version = new Version(1, 0, 0, 0);
var resources = assemblyDef.MainModule.Resources;
var att = assemblyDef.CustomAttributes.FirstOrDefault(x => x.AttributeType.Name == "AssemblyFileVersionAttribute");
att.ConstructorArguments.Clear();
att.ConstructorArguments.Add(new CustomAttributeArgument(new TypeReference("System", "string", null, null), "1.0.0.0"));
assemblyDef.Write(newAssemblyPath);
}
В конце концов, если вы действительно, действительно хотите изменить информацию о файле он будет иметь, чтобы быть сделано во время компиляции с помощью опции 1.
Я надеюсь, что это помогает.
AssemblyInfo необходимо будет изменить, и программа будет скомпилирована, если я не ошибаюсь. –
Поскольку @ BrockHensley-FKAdirt заявила, что AssemblyInfo (версия, информация автора) задана во время компиляции. Какие части информации о сборке вы хотите изменить? – Nico
Описание файла - Название продукта - Версия продукта - Оригинальное имя файла (я хочу изменить исходное имя файла из MainExe.exe в settings.exe), Оригинальное имя файла - моя цель ... – MoonLight