2014-02-18 6 views
3

1 개의 웹 응용 프로그램 프로젝트가 포함 된 솔루션이 있습니다. 3 개의 C# 클래스 라이브러리 프로젝트를 추가하고이 세 프로젝트의 프로젝트 참조를 기존 웹 응용 프로그램 프로젝트에 추가하려고합니다. PowerShell을 사용하여이 작업을 수행합니다. 세 가지 프로젝트를 솔루션에 추가 할 수 있지만 기존 프로젝트에 프로젝트 참조를 추가하는 방법을 알 수 없습니다. 참조에 액세스하려면 VSLangProj.VSProject를 사용해야한다는 것을 알고 있지만 계속 변환 오류가 발생합니다.Powershell에서 EnvDTE 및 VSLangProj 사용 :

유형의 "System._ 하여 ComObject"값을 변환 할 수 없습니다. "시스템 _ComObject 번호 {b1042570-25c6-424a-b58b-56fa83aa828a}"를 입력하는 "VSLangProj.VSProject : 여기

오류입니다 ".

여기에 내가 지금까지 가지고있는 관련 코드가 있습니다.

[void][System.Reflection.Assembly]::LoadWithPartialName("envdte.dll") 
[void][System.Reflection.Assembly]::LoadWithPartialName("envdte80.dll") 
[void][System.Reflection.Assembly]::LoadWithPartialName("VSLangProj.dll") 
[void][System.Reflection.Assembly]::LoadWithPartialName("VSLangProj80.dll") 

$envdte = [System.Runtime.InteropServices.Marshal]::GetActiveObject("VisualStudio.DTE.12.0") 


    $envdte.Solution.Open($FullPathtoSolution) 

    $envdte.Solution.AddFromFile($FUllPathtoNewProject1) 
$envdte.Solution.AddFromFile($FUllPathtoNewProject2) 
$envdte.Solution.AddFromFile($FUllPathtoNewProject3) 

    $envdte.Solution.SaveAs($FullPathtoSolution) 

    foreach ($proj in $envdte.Solution.Projects) 
       { 
        $proj.Kind #Prints {FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} 
     $proj.Name #Prints the name of my web application project like it should 
     $vsproj = [VSLangProj.VSProject]$proj.Object #this line causes the error 
     $vsproj.References.AddProject($NewProject1Name) 
        $vsproj.References.AddProject($NewProject2Name) 
        $vsproj.References.AddProject($NewProject3Name) 
       } 



$envdte.Solution.SaveAs($FullPathtoSolution) 

답변

1

VSLangProj.VSProject에서 VSLangProj80.VSProject2으로 변경해보십시오. 그래서 :

$vsproj = [VSLangProj.VSProject]$proj.Object 

가된다 :

$vsproj = [VSLangProj80.VSProject2]$proj.Object 

은 MSDN에 VSProject2 Interface 문서 (특히 GuidAttribute)를 참조하십시오.

+0

을, 또한 VSLangProj.VSProject'로 주조 할 수있다 '뿐만 아니라. –

+0

VSProject2는 VSProject에서 파생 되었기 때문에 의미가 있지만 COM이 캐스팅을 처리하는지 확실하지 않습니다. 오류 메시지에 나열된 GUID는 VSProject2입니다. – areyling

0

VSProject Interface에 대한 문서에 따르면 EnvDte.Project.Object는 Visual Basic 또는 Visual C# 프로젝트의 경우에만 VSProject입니다. 다음과 같은 (C#의 예) 시도 할 수 있습니다 : 뭔가가 성공적으로 주조 할 수있는 경우 VSLangProj80.VSProject2``내 제한하지만 하드 얻은 경험에

if (project.Kind == VSLangProj.PrjKind.prjKindCSharpProject) 
{ 
    var vsproj = (VSLangProj.VSProject)project.Object; 
    vsproj.References.Add(...); 
}