2015-05-06 8 views
0

Я пытаюсь изменить имя сборки моей dll во время сборки. Я создал еще один exe, который изменяет имя сборки в файле csproj, который я выполняю во время предварительной сборки. Но похоже, что мои изменения в файле csproj вступают в силу только после завершения сборки, что, конечно же, не то, что я хочу.Уникальное имя сборки для каждой сборки

Имя сборки должно быть уникальным при каждом его создании, поэтому я создаю его, добавив GUID.

var xmlDoc = XDocument.Load(projectFile); 
XNamespace ns = "http://schemas.microsoft.com/developer/msbuild/2003"; 
string newAssemblyName = originalAssemblyName + "_" + Guid.NewGuid().ToString("N"); 

xmlDoc.Element(ns + "Project").Element(ns + "PropertyGroup").Element(ns + "AssemblyName").Value = newAssemblyName; 

xmlDoc.Save(projectFile); 

мне было интересно, если есть, возможно, путь к «силе» перезагрузить csproj во время предварительной сборки или, если есть другой способ, которым я мог бы получить уникальное имя сборки каждый раз я строй моего решения.

+0

Копирования после сборки может быть дешевым и грязным решением ... Кроме того, что вы делаете чувствуете странно и, возможно, есть лучшее решение для вашей исходной проблемы, с которой вы пытаетесь работать (например, выгрузить плагин-домен). –

+0

Я не говорю, что вы делаете что-то не так, но я также * чрезвычайно * интересуюсь тем, почему вам нужно уникальное имя сборки каждый раз. –

+0

Я действительно загружаю dll в другое приложение. Моя первоначальная проблема заключалась в том, что другое приложение блокирует DLL, поэтому мне нужно закрыть его, построить мою dll, загрузить приложение снова. Поэтому я попытался автоматизировать мое ручное обходное решение. Я попытался переименовать старую dll, а затем создать новую dll, но я думаю, что как-то приложение, в которое я его загружаю, было кэшировано или что-то в этом роде, потому что единственный способ получить его для загрузки моей новой DLL - это изменить имя сборки. Но я тоже открыт для лучших решений! – VincentC

ответ

0

Я имел некоторый успех, делая это в файле csproj в VS2013:

<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
[...] 
    <PropertyGroup> 
    <MyNewGuid>$([System.Guid]::NewGuid())</MyNewGuid> 
    </PropertyGroup> 
[...] 
    <AssemblyName>$(MyNewGuid)</AssemblyName> 

По крайней мере, каждый раз, когда я пересобрать его, как представляется, сгенерировать сборку с другим GUID для имени.

Если вы используете очень старую версию MSBuild, вы можете посмотреть здесь альтернативный способ создания GUIDs: http://phoebix.com/2013/08/08/who-got-the-func-part-3-generating-a-guid-in-msbuild/