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 = "こんにちは世界";

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

ただし、このスクリプトをコピーしてPowerGUIに貼り付けると、問題なく動作します。

私が見つけた最も役に立ったリンクはこれでした。-language パラメータを csharpversion3 に変更しようとしましたが、次のようになりました。

タイプを追加できません。コンパイル エラーがありました。(0) : 同じ ID を持つアセンブリ 'System.Core, Version=3.5.0.0, Cul
ture=neutral, PublicKeyToken=b77a5c561934e089' は既にインポートされています。重複する参照の 1 つを削除してみてください。

(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>  

Powershell コード:

$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 に答える