Powershell加载自定义程序集配置文件

时间:2017-04-28 08:39:13

标签: c# powershell dll app-config .net-assembly

我有一个DLL文件,在我的c#代码中在visual studio中创建。我需要从powershell运行我的代码,因此我使用Add-Type方法加载我的程序集。

我的Powershell代码:  Add-Type -Path C:\MyDirectoryWithDllFiles\MyAssembly.dll [MyAssembly.MyClass]::MyStaticMethod()

当我把回归" Hello World"在MyStaticMethod中,一切正常。

当然,我的程序需要一些功能,并且需要配置文件。 我将我的powershell代码更新为:

[appdomain]::CurrentDomain.SetData("APP_CONFIG_FILE", "C:\MyDirectoryWithDllFiles\MyAssembly.dll.config")
Add-Type -AssemblyName System.Configuration
Add-Type -Path C:\MyDirectoryWithDllFiles\MyAssembly.dll
[MyAssembly.MyClass]::MyStaticMethod()

使用以下配置文件:(MyAssembly.dll.config)

<?xml version="1.0"?>
<configuration>
    <configSections>
        <section name="myCustomSection" type="MyAssembly.MyCustomConfigurationSetting, MyAssembly" />
    </configSections>

    <!--this is the custom config section for myCustomSection-->
    <myCustomSection>
        <!-- some items -->
    </myCustomSection>
</configuration>

在MyStaticMethod中,我从配置文件中获取项目,当我从visual studio运行代码时,它工作正常。当我运行powershell代码时,如上所述,我收到以下错误:

  

PS C:\ MyDirectoryWithDllFiles&gt; [MyAssembly.MyClass] :: MyStaticMethod()   错误:[System.Configuration.ConfigurationErrorsException:错误   发生了创建配置节处理程序   myCustomSection:无法加载文件或程序集   &#39; MyAssembly&#39; 或其中一个依赖项。系统   找不到指定的文件。   (C:\ Users \ MyUserName \ AppData \ Local \ Temp \ tmp2EB6.tmp第4行)---&gt;   System.IO.FileNotFoundException:无法加载文件或程序集   &#39; MyAssembly程序&#39;或其中一个依赖项。系统找不到了   文件指定。在   System.Configuration.TypeUtil.GetTypeWithReflectionPermission(IInternalConfigHost   host,String typeString,Boolean throwOnError)

它试图找到&#39; MyAssembly&#39;,就像我在配置文件中定义它一样。 MyAssembly.dll是我创建的一个DLL。但即使我在我的powershell中有这一行,它仍然无法工作: Add-Type -Path C:\ MyDirectoryWithDllFiles \ MyAssembly.dll

我有什么建议可以让它发挥作用吗?

1 个答案:

答案 0 :(得分:0)

<强>解决方案:

感谢JayKul在https://stackoverflow.com/a/23569983/1408786

的回答

我将此添加到配置部分,现在它可以正常工作: Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null

<section name="myCustomSection" type="MyAssembly.MyCustomConfigurationSetting, MyAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />