2016-10-03 4 views
1

파워 쉘 스크립트에서 .Net을 참조 할 때 도와 주시겠습니까? PowerShell ISE를 사용하여 스크립트를 작성/디버깅합니다. 나는 그 안에 Nuget 패키지를 참조하는 몇 가지 .net 코드를 가지고 있으며 powershell 스크립트에이 코드를 포함하고자합니다.참조 .Net .dll from powershell scripts

C : \ WINDOWS \ system32 \ WindowsPowerShell \ v1.0 및 스크립트의 루트 (C : \ TestProjects \ UpdateLocalNugetRepository) 경로에 필수 .dll을 복사하면 제대로 작동합니다. 나는 우리가 .dlls를 system32 폴더에 복사 할 수없는 제작 과정에서 그 beacuse를하고 싶지 않습니다. 나는 잘못된 것을하고 있다는 것을 알고 있습니다. 도와 주실 수 있겠습니까? 다음은 내 파워 쉘 스크립트입니다 -

$path = "C:\TestProjects\UpdateLocalNugetRepository" 
 

 
$Assem [email protected](
 
     "$path\NuGet.Configuration.dll", 
 
     "$path\System.Core.dll", 
 
     "$path\System.dll" 
 
     ) 
 

 
      
 
$Source = @” 
 
using NuGet.Configuration; 
 
using System; 
 
using System.Collections.Generic; 
 
using System.Linq; 
 
using System.Threading; 
 
using System.Threading.Tasks; 
 

 
namespace NuGetPSTest 
 
{ 
 
    public class Utility 
 
    { 
 
    \t public static async Task<bool> MyMethod(string packageName, string p1, string p2) 
 
     { 
 
     \t \t //Here I use above mentioned .dll(Nuget.Configuration). 
 
\t } 
 
    } 
 

 
    
 
} 
 

 
“@ 
 

 
Add-Type -ReferencedAssemblies $Assem -TypeDefinition $Source -Language CSharp 
 

 

 

 
$result = [NuGetPSTest.Utility]::MyMethod(param1,param2,param3).GetAwaiter().GetResult() 
 
$result

+0

가능한 중복 (http://stackoverflow.com/questions/3360867/add-reference-to-dll-in-powershell-2 -0) –

+0

제공된 링크를 살펴 보았지만 약간 씩 다릅니다. .Net 패키지는 powershell에서 액세스 할 수 있지만 두 위치 모두에 있지 않으면 nuget .dll에 액세스 할 수 없습니다. 이 .dll은 sys32가 아니라 루트 폴더에만 보관하고 싶습니다. – Sham

+0

이 링크는 사용자에게 유용 할 수 있습니다. https://blogs.technet.microsoft.com/heyscriptingguy/2010/11/11/use-powershell-to-work-with-the-net-framework-classes/ –

답변

1

당신은 DLL의로드 할 Add-Type 조각을 사용할 수 있습니다

Add-Type -Path "$path\NuGet.Configuration.dll" 
Add-Type -Path "$path\System.Core.dll" 
Add-Type -Path "$path\System.dll" 

닷넷 DLL의이 같은 추가 할 수 있습니다

Add-Type -AssemblyName System.ServiceProcess 

확인 : https://blogs.technet.microsoft.com/heyscriptingguy/2010/11/11/use-powershell-to-work-with-the-net-framework-classes/

+0

.. 한번 해보겠습니다. – Sham

+0

일부 환경 변수를 사용하여 경로를 해결할 수 있습니다. https://technet.microsoft.com/en-us/library/ff730964.aspx –

+0

오류가 발생합니다. '구성'유형 또는 네임 스페이스 이름이 잘못되었습니다. 네임 스페이스 'NuGet'에 있습니다 (어셈블리 참조가 누락 되었습니까?) – Sham

0

문제의 해결책을 찾았으므로 다른 유형을 등록하기 위해 어셈블리를 참조하기 전에 Add-Type을 수행해야합니다. 아래는 내 업데이트 된 코드입니다. [파워 쉘 2.0에서 dll을 참조 추가]의

$path = "C:\TestProjects\UpdateLocalNugetRepository" 
 

 
Add-Type -Path "$path\NuGet.Configuration.dll" 
 
Add-Type -Path "$path\System.Core.dll" 
 
Add-Type -Path "$path\System.dll" 
 

 
$Assem [email protected](
 
     "$path\NuGet.Configuration.dll", 
 
     "$path\System.Core.dll", 
 
     "$path\System.dll" 
 
     ) 
 

 
      
 
$Source = @” 
 
using NuGet.Configuration; 
 
using System; 
 
using System.Collections.Generic; 
 
using System.Linq; 
 
using System.Threading; 
 
using System.Threading.Tasks; 
 

 
namespace NuGetPSTest 
 
{ 
 
    public class Utility 
 
    { 
 
    \t public static async Task<bool> MyMethod(string packageName, string p1, string p2) 
 
     { 
 
     \t \t //Here I use above mentioned .dll(Nuget.Configuration). 
 
\t } 
 
    } 
 

 
    
 
} 
 

 
“@ 
 

 
Add-Type -ReferencedAssemblies $Assem -TypeDefinition $Source -Language CSharp 
 

 

 

 
$result = [NuGetPSTest.Utility]::MyMethod(param1,param2,param3).GetAwaiter().GetResult() 
 
$result