Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.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# 如何引用第三方程序集而不在本地复制它们?_C#_.net_Reflection_Assemblies_Runtime - Fatal编程技术网

C# 如何引用第三方程序集而不在本地复制它们?

C# 如何引用第三方程序集而不在本地复制它们?,c#,.net,reflection,assemblies,runtime,C#,.net,Reflection,Assemblies,Runtime,我正在处理许多默认情况下随SDK一起安装的第三方程序集。但是,当使用反射时,.NET崩溃,出现以下错误“无法加载文件或程序集[Name.dll]”。因此,我发现有3种解决方案: 启用“本地复制”,这将强制编译器将所有程序集复制到生成文件夹(显著增加文件大小) 直接编译到第三方程序文件文件夹中,使.NET运行时能够轻松找到程序集(因为它们位于同一文件夹中)。这使得管理安装更加困难,因为两个应用程序共享一个公用文件夹 将大多数第三方程序集添加到GAC中(使用gacutil),并使用其强名称引用它。

我正在处理许多默认情况下随SDK一起安装的第三方程序集。但是,当使用反射时,.NET崩溃,出现以下错误“无法加载文件或程序集[Name.dll]”。因此,我发现有3种解决方案:

  • 启用“本地复制”,这将强制编译器将所有程序集复制到生成文件夹(显著增加文件大小)

  • 直接编译到第三方程序文件文件夹中,使.NET运行时能够轻松找到程序集(因为它们位于同一文件夹中)。这使得管理安装更加困难,因为两个应用程序共享一个公用文件夹

  • 将大多数第三方程序集添加到GAC中(使用gacutil),并使用其强名称引用它。但这会触发另一种“未找到文件”错误,可能程序集无法完全从GAC运行,因为它需要来自其本机程序文件目录的一些文件


因此,我想知道是否有一种方法可以向.NET运行时提示第三方程序集目录路径,这样我就可以在其他地方编译我的应用程序,而不必被迫随身携带第三方程序集。(它们将已经安装在最终用户计算机上)

这些程序集不能在服务器或计算机上进行GAC,
或者您可以为您的应用程序创建一个.MSI安装程序并引入版本控制吗。。?只是一个想法。

如果程序集位于网络文件夹中,则.NET默认安全性将不会加载它们。您需要在.NET配置控制面板下调整安全设置,在“运行时安全策略”下有向导“调整区域安全”,然后选择“完全信任”的“本地Internet”


由于程序集当前位于单独的“共享”目录中,这意味着可以独立于引用它们的程序对它们进行版本控制。“本地复制”比这里更可取,否则您可能会陷入旧的“DLL地狱”,在您不知情的情况下交换不兼容的版本


GAC旨在解决这个问题,当然,您需要使用强命名,并且您需要它们引用的所有程序集都具有强命名,并且也可以放在GAC中。这将创建额外的工作来管理版本控制和安装,但它允许并行版本控制并防止重复。尽管如此,如果您只引用少数应用程序中的程序集,那么将其放入GAC可能有点过头了。从长远来看,由于更新过程中版本的累积,您可能会占用更多的磁盘空间,而Copy Local只为每个加载的应用程序保留一个版本。

这些程序集不能在服务器或计算机上公开吗,或者您可以为您的应用程序创建一个.MSI安装程序并引入版本控制吗。。?只是个主意很高兴我能很快帮到你。。VOTEUP..这很有帮助,但我目前正在求助于#2使其发挥作用。您的解决方案(#3)不会。。。有关原因,请参阅帖子。