如何在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? 的相关文章

  • 在c#中创建sql连接

    我是这个网站的新手 也是编程的新手 我目前正在通过销售点创建库存系统 它使用模态和非模态形式 我的问题是 我正在研究change password对话框必须连接到数据库才能覆盖密码字段 我使用的数据库是Microsoft SQL Serve
  • 计算从给定日期开始的月份中的第几天?

    我正在努力寻找一种简单有效的解决方案来计算每月的工作日 例如 如果给定日期是第一个星期一Monday 5th March 2018然后我想获取接下来 6 个月每个月第一个星期一的日期 例如 Monday 2nd April 2018 and
  • 如何从 SOAP 响应中删除额外的结果标签

    我知道这个问题以前曾被问过 但我在任何地方都找不到答案 问题是我的 asmx 文件中有以下代码 namespace IrancellSmsServer SoapDocumentService RoutingStyle SoapService
  • 数组与列表的性能

    假设您需要一个需要频繁迭代的整数列表 数组 我的意思是非常频繁 原因可能有所不同 但可以说它位于大容量处理的最内层循环的核心 一般来说 人们会选择使用列表 List 因为它们的大小具有灵活性 最重要的是 msdn 文档声称列表在内部使用数组
  • 检查列表是否包含另一个列表。 C#

    编辑 只是说 ContainsAllItem 中的注释解释得最好 很抱歉问这个问题 我知道以前有人问过这个问题 但我只是不明白 好的 所以我想检查一个列表是否包含另一个列表中的所有项目WITHOUT重叠 以及根据类字符串 名称变量 称为项目
  • 如何将字节块读入结构体

    我有一个需要处理的资源文件 它包含一组文件 首先 资源文件列出了其中包含的所有文件 以及一些其他数据 例如在此结构中 struct FileEntry byte Value1 char Filename 12 byte Value2 byt
  • 为什么WCF中不允许方法重载?

    假设这是一个ServiceContract ServiceContract public interface MyService OperationContract int Sum int x int y OperationContract
  • 是什么原因导致 Linq 错误:此方法无法转换为存储表达式?

    我有一堆具有相同 select 语句的 Linq to Entity 方法 所以我想我会很聪明 并将其分离到它自己的方法中以减少冗余 但是当我尝试运行代码时 我得到了以下内容错误 该方法不能转化为 商店表达式 这是我创建的方法 public
  • 检测 SignalR Hub 客户端立即断开连接

    SignalR Hub OnDisconnected 何时在服务器端引发 对于崩溃或关闭而不调用Stop method 我正在使用 SignalR NET 客户端进行测试 而不是 javascript 客户端 如果我打电话给Stop客户端上
  • 创建带有部分的选项卡式侧边栏 WPF

    我正在尝试创建一个带有部分的选项卡式侧边栏 如 WPF 中的以下内容 我考虑过几种方法 但是有没有更简单 更优雅的方法呢 方法一 列表框 Using a ListBox并将 SelectedItem 绑定到右侧内容控件所绑定的值 为了区分标
  • 将文本从文本文件添加到 PDF 文件[重复]

    这个问题在这里已经有答案了 这是我的代码 using FileStream msReport new FileStream pdfPath FileMode Create step 1 using Document pdfDoc new D
  • 元素属性语法和属性属性语法之间有语义差异吗?

    我认为元素属性语法和属性属性语法在语义上没有太大区别 但是 我发现一定有什么不同 例如 下面的例子只是演示了一个简单的触发器
  • 文件显示在 Visual Studio 的解决方案资源管理器中,并带有快捷方式图标。这意味着什么?

    我已经下载了FParsec的库源代码 所有文件都带有快捷方式符号 这是什么意思 当该项目添加到该项目时 它被添加为链接Project gt Add Existing Item gt Add as Link 该文件很可能托管在目录结构中的另一
  • C# 7 表达式主体构造函数

    在 C 7 中 如何使用 2 个参数编写这样的表达式主体构造函数 public Person string name int age Name name Age age 一种方法是使用元组和解构来允许在一个表达式中进行多次赋值 public
  • 高度并行化的Levenshtein距离算法

    实际上 我必须实现一个字符串比较 最后得到匹配百分比 不仅仅是布尔结果匹配 不匹配 为此 我找到了 Levenstein 距离算法 但现在的问题是性能 例如 我有 1k 个字符串需要相互比较 现在大约需要 10 分钟 对于每个算法 我已经并
  • DataGridView 中的 C# FormatException

    我创建了一个带有一些列的 DataGridView 订单列仅允许用户输入 int 数字 当我输入 j 例如 时 它会抛出 FormatException 并且我尝试添加 try catch 来解决问题 但它看起来不起作用 private v
  • PowerShell 中的变量作用域

    PowerShell 的一个遗憾是函数和脚本块是动态作用域的 但另一件事让我感到惊讶的是 变量在内部作用域内表现为写时复制 array g function foo array h Write Host array array s Writ
  • 如何通过 PowerShell 获取注册表项的所有权?

    我尝试通过 PowerShell 获取注册表项的所有权 但它悄无声息地失败了 我正在使用以下代码 get the username of the current user uname System Security Principal Wi
  • .NET 内存不足故障排除

    在阅读了几篇有关 NET 技术中的内存的启发性文章后 Out of Memory 不是指物理内存 https learn microsoft com en us archive blogs ericlippert out of memory
  • 确保 StreamReader 不会挂起等待数据

    下面的代码读取从 tcp 客户端流读取的所有内容 并且在下一次迭代中它将仅位于 Read 上 我假设正在等待数据 我如何确保它不会在没有任何内容可供读取时返回 我是否必须设置低超时 并在失败时响应异常 或者有更好的办法吗 TcpClient

随机推荐

  • 使用 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 层解决方案的过程 我希望能够打开框架解决方案 获取活动实例 并使用自动生成的代码填充项目文件 我正在尝试对提供的示例进行转码