1

我有以下 powershell 脚本:

# C-Sharp source for taking our screenshot
$Source = @" 
using System;
using System.Linq;

namespace Testing
{
    public static class TestClass
    {
        public static void DoTest()
        {
             var myLinq = "hello world";
        }
    }
}
"@

$assem = @("System.Core")
$null = Add-Type -ReferencedAssemblies $assem -TypeDefinition $Source -Language Csharp

如果我通过 powershell.exe 运行它,powershell.exe C:\test.ps1我会收到以下错误:

无法添加类型。有编译错误。c:\Users\Administrator\AppData\Local\Temp\c9er05ba.0.cs(10) :类型或 n
找不到 amespace 名称“var”(您是否缺少 using 指令或程序集引用?)

c:\Users\Administrator\AppData\Local\Temp\c9er05ba.0.cs(9) : {

c:\Users\Administrator\AppData\Local\Temp\c9er05ba.0.cs(10) : >>> var myLinq = "hello world";

c:\Users\Administrator\AppData\Local\Temp\c9er05ba.0.cs(11) : }

但是,如果我将此脚本复制并粘贴到PowerGUI中,它运行得很好。

我能找到的最有帮助的链接是这个。所以我尝试将我的 -language 参数更改为 csharpversion3,但现在我得到了这个:

无法添加类型。有编译错误。(0) : 具有相同标识的程序集 'System.Core, Version=3.5.0.0, Cul
ture=neutral, PublicKeyToken=b77a5c561934e089' 已经被导入。尝试删除重复引用之一。

(1):使用系统;

有什么想法可以让这个脚本正常运行吗?

4

3 回答 3

5

坚持-language csharpversion3但放弃这-ReferencedAssemblies $assem一点 - 这就是给你重复导入的原因。

我还必须添加-IgnoreWarnings以编译您的片段,但我想那是因为您没有发布整个示例。

总之,命令:

Add-Type  -TypeDefinition $Source -Language CsharpVersion3 -IgnoreWarnings

将编译该代码而不会出错。

于 2012-10-18T12:24:39.187 回答
1

使用 powershell.exe.config 在 Powershell V 2.0 上工作

<?xml version="1.0"?>
<configuration>
      <startup useLegacyV2RuntimeActivationPolicy="true">
          <supportedRuntime version="v4.0.30319"/>
          <supportedRuntime version="v2.0.50727"/>
      </startup>
</configuration>  

电源外壳代码:

$Source = @" 
using System;
using System.Linq;

namespace Testing
{
    public static class TestClass
    {
        public static void DoTest()
        {
             var myLinq = "hello world";
             Console.WriteLine(myLinq.ToString());
    }
    }
}
"@

$null = Add-Type -ReferencedAssemblies system.core -TypeDefinition $Source -Language Csharp
于 2012-10-18T12:32:27.483 回答
0

我不完全确定 Powershell 了解“var”的用法。替换您的代码如下;

string myLinq = "hello world";

看看你的进展如何。

于 2012-10-18T12:19:06.443 回答