如何在PowerShell中使用DTE?

2024-02-25

我正在尝试使用 PowerShell 来自动执行基于种子(例如 EDMX 文件或 DbContext)配置创建 n 层解决方案的过程。我希望能够打开框架解决方案,获取活动实例,并使用自动生成的代码填充项目文件。

我正在尝试对提供的示例进行转码here http://msdn.microsoft.com/en-us/library/vstudio/68shb4dw.aspx但是,到 powershell 时,我收到错误。

这是我正在测试的 PowerShell 代码:

首先,我执行一个小函数来引用 DTE 程序集。

$libs = "envdte.dll", "envdte80.dll", "envdte90.dll", "envdte100.dll"
function LoadDTELibs {
    param(
        $path = "\Microsoft Visual Studio 10.0\Common7\IDE\PublicAssemblies"
    )

    Process {
        $libs |
            ForEach {
                $dll = Join-Path "$env:ProgramFiles\$path" $_

                if(-not (Test-Path $dll)) {
                    $dll = Join-Path "${env:ProgramFiles(x86)}\$path" $_
                }

                Add-Type -Path $dll -PassThru | Where {$_.IsPublic -and $_.BaseType} | Sort Name
            }
    }
}


LoadDTELibs

然后,我尝试创建一个对象来引用调用的结果[System.Runtime.InteropServices.Marshal]::GetActiveObject("VisualStudio.DTE.11.0")

PS> $dte = New-Object -ComObject EnvDTE80.DTE2

New-Object : Retrieving the COM class factory for component with CLSID {00000000-0000-0000-0000-000000000000} failed due to the following error: 80040154 
Class not registered (Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)).
At line:1 char:8
+ $dte = New-Object -ComObject EnvDTE80.DTE2
+        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ResourceUnavailable: (:) [New-Object], COMException
    + FullyQualifiedErrorId : NoCOMClassIdentified,Microsoft.PowerShell.Commands.NewObjectCommand

or:

PS> $dte = New-Object EnvDTE80.DTE2

New-Object : Constructor not found. Cannot find an appropriate constructor for type EnvDTE80.DTE2.
At line:1 char:8
+ $dte = New-Object EnvDTE80.DTE2
+        ~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (:) [New-Object], PSArgumentException
    + FullyQualifiedErrorId : CannotFindAppropriateCtor,Microsoft.PowerShell.Commands.NewObjectCommand

最后,这也不起作用:

PS> [EnvDTE80.DTE2]$dte = [System.Runtime.InteropServices.Marshal]::GetActiveObject("VisualStudio.DTE.11.0")

Cannot convert the "System.__ComObject" value of type "System.__ComObject#{04a72314-32e9-48e2-9b87-a63603454f3e}" to type "EnvDTE80.DTE2".
At line:1 char:1
+ [EnvDTE80.DTE2]$dte = [System.Runtime.InteropServices.Marshal]::GetActiveObject( ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : MetadataError: (:) [], ArgumentTransformationMetadataException
    + FullyQualifiedErrorId : RuntimeException

那么,我的问题是,如何从 PowerShell 使用 DTE?更具体地说,如何将调用 GetActiveObject 的结果转换为 EnvDTE.DTE2 类型?


我在 ISE 中尝试了一下这个想法,找到了一个简单的答案。

基本上,对 GetActiveObject 的调用会返回一个 COM 对象,可以直接在 PowerShell 中使用该对象。执行LoadDTELibs后,可以通过调用GetActiveObject获取DTE的实例,然后直接引用结果。

So...

PS> $dte = [System.Runtime.InteropServices.Marshal]::GetActiveObject("VisualStudio.DTE.11.0")

Then:

PS> $dte.solution.Create("D:\Testing", "Acme.sln")
PS> $dte.solution.SaveAs("D:\Testing\Acme.sln")

我不是 100% 确定,因为我不太了解 PowerShell 或 COM,但我认为您实际上不必担心释放 COM 实例。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在PowerShell中使用DTE? 的相关文章

随机推荐

  • 使用 Canvas 在 JS 中动画排序算法

    为了好玩 我尝试创建不同排序算法的可视化 但我遇到了 Canvas 动画的问题 我假设我只能在排序器方法中调用绘制函数 但这会导致浏览器锁定 直到数组完全排序 然后绘制一些中间帧 我将如何在排序方法中进行动画处理 下面是我到目前为止的代码
  • 在R中使用dplyr根据类型和滚动日期进行计数和标记

    我的问题类似于dplyr 使用滚动时间窗口对数据进行分组和汇总 变异 https stackoverflow com questions 36187931 dplyr grouping and summarizing mutating da
  • 如何解决 JSLint 警告“不要使用‘新’产生副作用”?

    为什么我会收到这些错误 第 329 行第 60 行字符的问题 不要使用 new 来产生副作用 new widget StyledDropdown dojo byId sTitle 第 330 行第 61 行字符的问题 不要使用 new 来产
  • Python 2 十进制的 Sin、cos 等?

    在Python 2 6中 我发现Decimal相当于sqrt pi is Decimal pi sqrt sin cos 或其他 反 三角函数是否有类似的函数 The docs http docs python org library de
  • 方法调用作为另一个方法调用的参数?

    我是abap OO 的新手 但之前用java开发过 并编写了一个abap cl caretaker 类 它应该处理数据库表及其本地副本 实习生表 上的操作 我想进行以下方法调用 caretaker gt show table caretak
  • Rails:使用remote: true 停止页面刷新

    我有一个projects show html erb页 Aproject has many project messages并从projects show html erb页面 用户可以创建一个新的project message然而 当新的
  • 模型绑定新Datatables 1.10参数

    在 Datatables 1 10 中 ajax 服务器端参数从 public class DataTableParamModel public string sEcho get set public string sSearch get
  • 如何将 AdMob GADBannerView 添加到每个视图

    我正在我的应用程序中实现一个 AdMob 横幅UIViewController 并且它正在工作 但我有很多视图 我想在每个屏幕上显示一个横幅 我如何实现一个出现在每个屏幕上的横幅 我正在尝试这个AppDelegate swift dispa
  • 谷歌地图添加标记

    我想在 Android 中的 Google 地图上添加标记 任何人都可以帮我做到这一点 如果你们有示例代码 这会对我有很大帮助 并且还告诉我如何设置地图片段的大小 提前致谢 use addMarker like myMap addMarke
  • 使用 Python 装饰器跟踪递归深度

    我正在尝试编写一个装饰器来跟踪Python中递归函数的递归深度 以递归函数为例 例如 def fib n if n 0 return 0 if n 1 return 1 else return fib n 1 fib n 2 通常 要跟踪递
  • 哈希函数增量意味着什么?

    例如 我听说 MurmurHash2 不是 增量 的 但 MurmurHash3 是增量的 这是什么意思 为什么它有用 增量哈希函数适用于以下情况 如果先前 哈希消息 M 稍微更新为新消息 M 然后 应该相当快地计算更新后的哈希值 消息 M
  • 我对同一个类有两个 Kotlin 扩展方法,但具有不同的通用签名,编译器会抱怨

    我正在为同一个类编写两个扩展函数 class Something
  • 不区分大小写的 XPath contains() 可能吗?

    我正在运行 DOM 的所有文本节点 并检查 nodeValue 是否包含某个字符串 html body text contains test 这是区分大小写的 不过我也想抓住Test TEST or TesT 这可以通过 XPath 在 J
  • 错误:资源 android:style/TextAppearance.Material.Widget.Button.Borderless.Colored 未找到

    我正在尝试构建一个具有compileSdkVersion 25和targetSdkVersion 25的项目 但我需要将两者更改为23 因此在更改compileSdkVersion 23和targetSdkVersion 23后我收到错误
  • javascript try catch 在 Firefox 中不能完全工作

    有人可以解释一下为什么会这样吗 不会向我发出 出现问题 的警报 也不会向我发出 正常 的警报 它在镀铬中工作得很好 但在 Firefox 中 它只是退出 它确实在 Web 控制台中显示错误 try catch 的全部目的是确保如果我输入
  • 是否有一个 C++ 标准类可以在作用域退出时将变量设置为值

    在成员函数的范围内 我想临时将成员变量设置为某个值 然后 当这个函数返回时 我想将此成员变量重置为给定的已知值 为了避免异常和多次返回 我用一个简单的 RAII 类来完成它 它是在成员函数的范围内定义的 void MyClass MyMem
  • 根据特定文本字符串选择列

    我正在尝试组合一个宏 该宏将选择某些列并将它们粘贴到新工作表中 问题在于 列往往会根据人们认为合适的方式添加和删除 这会破坏绝对引用 我一直在尝试修改使用宏记录器生成的基本宏 但我没有运气根据其内容选择列 我有一张每天从我们的数据库生成的工
  • 在没有 gpg 签名的情况下验证 git 提交

    我们开始使用 git 作为 VCS 之前使用 SVN 并发现在 git 中您可以轻松区分更改和提交背后的真实人物 现在我们想知道为什么做出这样的设计选择以及是否有我们忽略的事情 让我们假设以下情况 每个人都已经向 gitlab 注册了 ss
  • Perforce API 的 .net 包装器?

    我目前正在 NET 4 中开发一个应用程序 它必须与 Perforce 服务器交互 我的团队之前使用 Perforce API 开发了某种包装器 但它缺少相当多的用例 并且无法正确处理异常 简而言之 这不是我真正可以按原样使用的东西 因为它
  • 如何在PowerShell中使用DTE?

    我正在尝试使用 PowerShell 来自动执行基于种子 例如 EDMX 文件或 DbContext 配置创建 n 层解决方案的过程 我希望能够打开框架解决方案 获取活动实例 并使用自动生成的代码填充项目文件 我正在尝试对提供的示例进行转码