Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/333.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#_Visual Studio_Deployment_Frameworks - Fatal编程技术网

C# 通过配置加载依赖程序集

C# 通过配置加载依赖程序集,c#,visual-studio,deployment,frameworks,C#,Visual Studio,Deployment,Frameworks,我有一个visualstudio项目,运行非常好。 但是,对于将不同的DLL放在不同的文件夹中的部署,出现了一个新的客户机需求 我们有一个框架dll,可以在不同的项目中使用。此框架dll依赖于某些第三方dll。因此,当我从我的项目中使用这个dll时,每个依赖的dll都会复制到构建时的本地,因为CopyLocal属性为true 但现在有了新的要求,我们不能将CopyLocal属性设置为True。客户机不需要任何dll的本地副本,而是希望在某个位置使用与框架相关的dll。当我这样做时,依赖的DLL不

我有一个visualstudio项目,运行非常好。 但是,对于将不同的DLL放在不同的文件夹中的部署,出现了一个新的客户机需求

我们有一个框架dll,可以在不同的项目中使用。此框架dll依赖于某些第三方dll。因此,当我从我的项目中使用这个dll时,每个依赖的dll都会复制到构建时的本地,因为CopyLocal属性为true

但现在有了新的要求,我们不能将CopyLocal属性设置为True。客户机不需要任何dll的本地副本,而是希望在某个位置使用与框架相关的dll。当我这样做时,依赖的DLL不会被隐藏

我知道我有两个选择:

  • 我可以将它们放在GAC中,但我不想这样做,因为我希望它们支持xcopy
  • 使用反射(但我不确定这是不是正确的方法)

  • 我们可以使用配置执行任何操作吗???

    您可以使用以下配置程序集探测路径:

    指定公共语言运行库在加载程序集时要搜索的应用程序基子目录

    MSDN中的示例:

    <configuration>  
       <runtime>  
          <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">  
             <probing privatePath="bin;bin2\subbin;bin3"/>  
          </assemblyBinding>  
       </runtime>  
    </configuration>  
    
    <configuration>  
       <runtime>  
          <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">  
             <dependentAssembly>  
                <assemblyIdentity name="myAssembly"  
                                  publicKeyToken="32ab4ba45e0a69a1"  
                                  culture="neutral" />  
                <codeBase version="2.0.0.0"  
                          href="http://www.litwareinc.com/myAssembly.dll"/>  
             </dependentAssembly>  
          </assemblyBinding>  
       </runtime>  
    </configuration>  
    

    也许可以将框架dll的路径添加到path环境变量中。我认为探测可以在同一个应用程序目录中工作。但我一定会试试这个。再次感谢这将不会工作,因为我认为我不能强名称第三方dll的。如果不给他们一个强有力的名字,我们可能就不能使用这个。如果我没弄错的话。
    AppDomain.CurrentDomain.AssemblyResolve += (s, e) =>
        Assembly.LoadFile(Path.Combine(Settings.Default.AssemblyPath, Path.ChangeExtension(e.Name.Substring(0, e.Name.IndexOf(',')), ".dll")));