相关疑难解决方法(0)

使用相同dll的2个不同版本?

我已经获得了2个预编译的dll:

Common.Data, Version=1.0.0.0, Culture=neutral, PublicKeyToken=f3b12eb6de839f43, processorArchitecture=MSIL

Common.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=f3b12eb6de839f43, processorArchitecture=MSIL
Run Code Online (Sandbox Code Playgroud)

API差异示例:

API

我正在尝试将两者加载到一个项目中,以执行以下操作:

extern alias v10;
extern alias v20;

private static void UpgradeUser()
{
    // Load old user
    var userOld = new v10::Common.Data.UserData();
    userOld.loadData("user.dat");

    // Create new user
    var userNew = new v20::Common.Data.UserData();

    // Copy properties  
    userNew.FirstName = userOld._firstName;
    userNew.LastName = userOld._lastName;
    userNew.Age = userOld._age;

    // Invoke method from v10 and v20 API
    userOld.version();
    userNew.DisplayVersion();

    if (userNew.GetUserInfo() != userOld.getInfo())
    {
        throw new Exception("Discrepencies in upgrade ");
    }

    Console.WriteLine("Upgrade done!");
} …
Run Code Online (Sandbox Code Playgroud)

.net c# versioning visual-studio-2015

21
推荐指数
1
解决办法
2万
查看次数

在一个应用程序中使用不同版本的dll文件

我有一个带有两个库的c#应用程序(moon-apns,tweetsharp)..每个库都有对newtonsoft.json.dll的引用但不同的版本...我的应用程序构建成功但是一个库工作正常而另一个库引发异常(找不到dll文件).

我认为当我构建只有一个版本进入bin文件夹,但我不知道该怎么做.

提前致谢.

.net c# dll json.net

8
推荐指数
1
解决办法
2980
查看次数

将不同版本的程序集加载到单独的AppDomain中

我正在实现支持插件的应用程序。当前,当我尝试加载由主机应用程序和插件使用的通用程序集时,会出现问题 :主机应用程序应使用该程序集的一个版本,而插件使用另一版本。这由应用程序升级过程决定-插件可以与主机应用程序分开进行更新。

每个程序集都经过签名,因此我使用强名称来加载程序集。

我创建了一个演示该问题的测试应用程序。插件程序集位于主机应用程序的子文件夹“ Plugin”中。Plugin文件夹包含插件实现DLL,插件声明接口DLL和CommonLib DLL。主机应用程序还使用插件声明DLL和CommonLib DLL(位于文件夹树中的上一级)。

这是插件加载的源代码:

static void Main(string[] args)
{
    Console.WriteLine("Host   says: {0}", GreetingManager.SayHello("Sasha"));
    Console.WriteLine("Host   says: {0}", GreetingManager.SayGoodBye("Sasha"));
    var pluginDir = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Plugin");
    var pluginFile = Directory.GetFiles(pluginDir).First(f => f.EndsWith("Plugin.dll"));

    Assembly asmr = Assembly.ReflectionOnlyLoadFrom(pluginFile);

    AppDomain pluginDomain = AppDomain.CreateDomain("Plugin", null, pluginDir, "", false);

    pluginDomain.Load(asmr.FullName);

    Assembly asm = pluginDomain.GetAssemblies().First(a => a.GetName().Name == "Plugin");
    Type p = asm.GetTypes().First(t => t.GetInterfaces().Contains(typeof(IPlugin)));

    var pluginInstance = (IPlugin)pluginDomain.CreateInstanceAndUnwrap(asm.FullName, p.FullName);
    Console.WriteLine("Plugin says: {0}", pluginInstance.TransformString("Sasha"));
}
Run Code Online (Sandbox Code Playgroud)

它引发异常:

Unhandled Exception: System.IO.FileLoadException: Could not load file …
Run Code Online (Sandbox Code Playgroud)

.net c# clr appdomain

3
推荐指数
1
解决办法
1678
查看次数

标签 统计

.net ×3

c# ×3

appdomain ×1

clr ×1

dll ×1

json.net ×1

versioning ×1

visual-studio-2015 ×1