Ostatnio pisałem
o możliwości przenoszenia typu/klasy pomiędzy różnymi assembly
(bibliotekami), pominąłem jednak pewien element. Mianowicie, to co
napisałem jest zgodne z prawdą, gdy nie podpisujemy assembly
(strong name) i nie zmienią się wersje assembly, a przecież często
wersje zmieniane są automatycznie podczas kompilacji. Na szczęście
na to też jest rozwiązanie, a mianowicie przekierowanie wersji
assemlby (Redirecting Assembly Versions).
Zobaczmy przykład.
Mamy następujące solution:
Aplikacja RedirectingAssemblyVersions
ma powiązanie z biblioteką MyClassLibrary przez plik .dll, a nie
jako referencję między projektami. Obydwa assembly jako wersję w
AssemblyInfo mają wpisane:
[assembly: AssemblyVersion("1.0.*")]
Oznacza to, że po każdej kompilacji
wersja assembly się zmienia.
Zawartość pliku Class1.cs:
using System;
using System.Reflection;
namespace MyClassLibrary
{
public class MyClass
{
public static string DoSth()
{
return Assembly.GetAssembly(typeof(MyClass)).FullName;
}
}
}
natomiast pliku Program.cs:
using System;
using MyClassLibrary;
using System.Reflection;
namespace RedirectingAssemblyVersions
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("my assemlby: " + Assembly.GetAssembly(typeof(Program)).FullName);
Console.WriteLine("lib assemlby:"+ MyClass.DoSth());
Console.ReadLine();
}
}
}
Po skompilowaniu obydwu elementów w
kolejności: MyClassLibrary, a później
RedirectingAssemblyVersions, powinniśmy otrzymać na ekranie coś
podobnego do:
Jednak gdy skompilujemy w odwrotnej
kolejności, to zobaczymy:
Ale wystarczy przekierować wersję
assembly w pliku app.config, np.:
RedirectingAssemblyVersions.exe.config:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="MyClassLibrary" publicKeyToken="b7abd5f1e8d9cb61" />
<bindingRedirect oldVersion="1.0.3782.40182" newVersion="1.0.3782.40275" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
i wtedy mamy już dobrze działającą
aplikację:
Prostę prawda? Polecam również
przeczytać: http://msdn.microsoft.com/en-us/library/7wd6ex19.aspx
(tam znajduje się więcej informacji w tym temacie).













Maciej_Zbrzezny on delicious.com
Bardzo pomocny artykuł
OdpowiedzUsuń