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?












Maciej_Zbrzezny on delicious.com
Przedstawione bardzo profesjonalnie.
OdpowiedzUsuń