不要在powershell中加载组件

本文关键字:加载 组件 powershell | 更新日期: 2023-09-27 18:01:18

我尝试在powershell中执行c#。我写了剧本,但行不通。此脚本包含c#中的hello简单类进行测试。将来我需要使用XML。这就是我添加System.XML的原因。

Source = @"
using System;
using System.IO;
using System.Xml;
using System.Xml.Serialization;
namespace ConverterTRX
{
    public class PS
    {
        public static string Convert()
        {
            XmlSerializer xmlSer = new XmlSerializer(typeof(string));
            return "Convert1";
        }
        public static string Convert1(string path)
        {
            return "Convert2="+path+"/123";
        }
    }
}
"@
if (-not ([System.Management.Automation.PSTypeName]'PS').Type)
{
    Add-Type -AssemblyName Microsoft.CSharp
    Add-Type -AssemblyName System
    Add-Type -AssemblyName System.Core
    Add-Type -AssemblyName System.Data
    Add-Type -AssemblyName System.Data.DataSetExtensions
    Add-Type -AssemblyName System.Xml
    Add-Type -AssemblyName System.Xml.Linq
    Add-Type  -TypeDefinition $Source -Language CSharp
}
"Call function"
[ConverterTRX.PS]::Convert()

这个脚本抛出异常:

Add-Type : *'Temp'zktiv5n4.0.cs(3) : The type or namespace name 'Xml' does not exist in the namespace 'System' (are you missing an assembly reference?)
*'Temp'zktiv5n4.0.cs(2) : using System.IO;
*'Temp'zktiv5n4.0.cs(3) : >>> using System.Xml;
*'Temp'zktiv5n4.0.cs(4) : using System.Xml.Serialization;

那么,它是如何修复的呢?

不要在powershell中加载组件

您需要将-ReferencedAssemblies参数添加到Add-Type cmdlet调用中,否则您将无法获得名称空间

$referencingassemblies = ("C:'Windows'Microsoft.NET'Framework'v4.0.30319'System.XML.dll")
Add-Type  -TypeDefinition $Source -ReferencedAssemblies $referencingassemblies -Language CSharp