2

.net コンソール アプリケーション内の PowerShell 実行空間にアセンブリを読み込む際に問題が発生しています。

アプリケーションを実行すると、「タイプ [Test.Libary.TestClass] が見つかりません: このタイプを含むアセンブリが読み込まれていることを確認してください」というエラーが表示されます。

アセンブリを GAC にインストールしようとしましたが、違いはないようです。AssemblyConfigurationEntry クラスに関する多くのドキュメントを見つけることができなかったようです。

コンソール アプリケーション:

namespace PowerShellHost
{
    class Program
    {
        static void Main(string[] args)
        {
            string assemblyPath = Path.GetFullPath("Test.Library.dll");

            RunspaceConfiguration config = RunspaceConfiguration.Create();

            var libraryAssembly = new AssemblyConfigurationEntry("Test.Library, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d7ac3058027aaf63", assemblyPath);
        config.Assemblies.Append(libraryAssembly);

            Runspace runspace = RunspaceFactory.CreateRunspace(config);
            runspace.Open();

            PowerShell shell = PowerShell.Create();
            shell.Runspace = runspace;

            shell.AddCommand("New-Object");
            shell.AddParameter("TypeName", "Test.Libary.TestClass");

            ICollection<PSObject> output = shell.Invoke();
        }
    }
}

Test.Library.dll:

namespace Test.Library
{
    public class TestClass
    {
        public string TestProperty { get; set; }
    }
}
4

1 に答える 1

2

Add-Typeこれを実現するためにスクリプトから呼び出すことができます。

PowerShell shell = PowerShell.Create(); 

shell.AddScript(@"
Add-Type -AssemblyName Test.Library

$myObj = New-Object Test.Library.TestClass
$myObj.TestProperty = 'foo'
$myObj.TestPropery
"); 

ICollection<PSObject> output = shell.Invoke();

これは、DLL が GAC にある場合に機能するはずです。Add-Typeそれ以外の場合、の代わりに呼び出す場合は、-AssemblyName Test.Library代わりに使用する必要があります-Path c:\path\to\Test.Library.dll

于 2012-09-13T06:01:50.000 に答える