Czasem jest potrzeba przeniesienia jakiejś klasy z jednej biblioteki (assembly) do drugiej. Jest to dość powszechna czynność, ale może sprawić problem, a mianowicie co zrobić, jeżeli nie możemy przekompilować aplikacji, która z pewnej biblioteki korzysta, a właśnie wykorzystana klasa została przeniesiona do innej biblioteki. Na szczęście jest na to lekarstwo: TypeForwardedTo.
Przeanalizujmy przykład.
Mamy proste solution:
Aplikacja TypeForwardedTo ma
referencję do ClassLibrary1, w której znajduje się prosta klasa
(Class1.cs):
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Reflection; namespace ClassLibrary { public class MyClass { public static string DoSth() { return Assembly.GetAssembly(typeof(MyClass)).FullName; } } }
Natomiast program główny (Program.cs)
wygląda następująco:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using ClassLibrary; namespace TypeForwardedTo { class Program { static void Main(string[] args) { Console.WriteLine(MyClass.DoSth()); Console.ReadLine(); } } }
Niestety jednak wymyśliło nam się by
przenieść MyClass do nowego assembly ClassLibrary2. Robimy więc
kolejne solution:
Zmieniamy pliki:
Class1.cs:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Reflection; namespace ClassLibrary { //public class MyClass //{ // public static string DoSth() // { // return Assembly.GetAssembly(typeof(MyClass)).FullName; // } //} }
Class2.cs:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Reflection; namespace ClassLibrary { public class MyClass { public static string DoSth() { return Assembly.GetAssembly(typeof(MyClass)).FullName; } } }
Niestety aplikacja jest już
skompilowana, a nam ktoś Zły zabronił ją przekompilować. Co
zrobić?
Wystarczy do AssemblyInfo biblioteki
ClassLibrary1 dodać linię:
[assembly: TypeForwardedTo(typeof(ClassLibrary.MyClass))]
Przekompilować dwie biblioteki,
przegrać je do katalogu z naszą aplikacją TypeForwardedTo i...
działa:
Proste prawda?
Przedstawione bardzo profesjonalnie.
OdpowiedzUsuń