Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 加载静态引用的.NET程序集的任何版本_C#_.net_.net Assembly_Assembly Resolution - Fatal编程技术网

C# 加载静态引用的.NET程序集的任何版本

C# 加载静态引用的.NET程序集的任何版本,c#,.net,.net-assembly,assembly-resolution,C#,.net,.net Assembly,Assembly Resolution,我正在开发一个使用另一个产品的.NET程序集的工具。我的项目中静态引用了少数程序集(使用“添加引用”),因为我需要在代码中实际使用这些类型。但是我从产品的安装目录动态加载了许多其他程序集,使用反射动态实例化我需要的任何对象 我不想为我所依赖的每一个可能的产品版本重新编译和发布一个单独的项目版本。我需要的程序集的某些版本肯定会出现在应用程序安装目录中,因此我希望使用安装的程序集的任何版本。但它可能与我最初在构建工具时使用的程序集版本不完全相同。(产品版本控制策略是,产品中的所有程序集都具有相同的版

我正在开发一个使用另一个产品的.NET程序集的工具。我的项目中静态引用了少数程序集(使用“添加引用”),因为我需要在代码中实际使用这些类型。但是我从产品的安装目录动态加载了许多其他程序集,使用反射动态实例化我需要的任何对象

我不想为我所依赖的每一个可能的产品版本重新编译和发布一个单独的项目版本。我需要的程序集的某些版本肯定会出现在应用程序安装目录中,因此我希望使用安装的程序集的任何版本。但它可能与我最初在构建工具时使用的程序集版本不完全相同。(产品版本控制策略是,产品中的所有程序集都具有相同的版本号,每个版本都会更改,即使我需要静态引用的特定程序集自上一版本以来没有更改,或者支持我需要的100%API)

有可能做到这一点吗


允许我在请求程序集的不同版本时加载该程序集的特定版本。我的情况正好相反;我想加载出现的任何版本。

您可以绑定到AppDomain.CurrentDomain.AssmeblyResolve事件并自行处理解析

您是指静态引用的程序集还是动态加载的程序集?我希望在生成过程中静态引用程序集,然后(在运行时)实际使用目标计算机上已存在的副本(可能是稍有不同的版本)。动态加载的程序集没有问题,除非它们本身静态引用了我在构建工具时引用的相同程序集的不同版本,从而导致冲突和不兼容的类型,这些类型应该是兼容的。这就是为什么我想加载安装文件夹中的版本,而不是提供我自己的副本。也许这是错误的方法?你仍然使用绑定重定向。比如说,你要求1.0.0.0版本,你很高兴得到任何版本。关键是始终使用相同的参考程序集,因此始终要求使用1.0.0.0。现在制作一个副本,将其签入源代码管理。你迟早会后悔的。这是动态解析大多数程序集的方式(仅基于程序集名称)。我没有意识到用不同的强名称加载静态引用的程序集是可行的(因为版本号不同)。我来试一试。作为参考,我找到了一些明确说明是的,这种方法有效的文档。我所需要做的就是删除包含在我的项目输出文件夹中的不匹配程序集,这样运行时就不会首先加载它们,然后从同一文件夹中动态加载所有内容,并具有匹配的一致版本。