PS添加类型期间(“ C#代码”找不到“元文件.dll”)

时间:2018-10-01 12:48:55

标签: c# powershell add-type

我想通过使用Add-Type在PS脚本中执行C#代码。但我收到: Metadata file 'Microsoft.Azure.ServiceBus.dll' could not be found。 C#代码使用一个名为“ Microsoft.Azure.ServiceBus”的NuGet包。

我引用的程序集似乎不起作用。这是我的代码:

PS

$cmd = {

$Assem = ( 
"Microsoft.Azure.ServiceBus", 
"netstandard, Version=2.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51"
) 

$Source = (Get-Content -Path "D:\myPath\csharp-code.cs" -ReadCount 0) -join "`n"

Add-Type -ReferencedAssemblies $Assem -TypeDefinition $Source -Language CSharp 
[ABC.Azure.ServiceBus.TopicSubscriber]::test()
}

# Execute script as Job to avoid "Add-Type"-conflict during development changes
$j = Start-Job -ScriptBlock $cmd

do 
{
  Receive-Job -Job $j
} while ( $j.State -eq "Running" )

C#

using Microsoft.Azure.ServiceBus;
using System;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Timers;

namespace ABC.Azure.ServiceBus
{
  class TopicSubscriber
  {
    bool test()
    {
        <more code>
    }
  }
}

此问题的根源是什么,我该如何解决?不幸的是,我对PS和C#不太熟悉。

1 个答案:

答案 0 :(得分:0)

您收到的问题本质上是:File not found.

根本原因是您在-

中引用程序集的相对路径
$assemblies = @(
    'Microsoft.Azure.ServiceBus'
    'netstandard, Version=2.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51'
)

因为Microsoft.Azure.ServiceBus不在GAC中。

我怀疑如果您在Set-Location文件所在的位置使用Microsoft.Azure.ServiceBus.dll,将会解决您的问题。