我有1个Web应用程序项目的解决方案。我试图将三个C#类库项目添加到其中,然后将这三个项目的项目引用添加到现有的Web应用程序项目中。我正在使用Powershell进行此操作。我可以将三个项目添加到解决方案中,但是我不知道如何将项目引用添加到现有项目中。我知道我必须使用VSLangProj.VSProject才能访问引用,但是我一直收到转换错误。

这是错误:

无法将类型为“System._ComObject#{b1042570-25c6-424a-b58b-56fa83aa828a}”的“System._ComObject”值转换为类型“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)

最佳答案

尝试从VSLangProj.VSProject更改为VSLangProj80.VSProject2。所以:

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

变成:
$vsproj = [VSLangProj80.VSProject2]$proj.Object

请参阅MSDN上的VSProject2 Interface文档(特别是GuidAttribute)。

关于c# - 在Powershell中使用EnvDTE和VSLangProj:,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21864118/

10-12 05:50