Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Roslyn :获取当前项目/获取选定的当前文档

Roslyn :获取当前项目/获取选定的当前文档
EN

Stack Overflow用户
提问于 2016-03-25 02:24:56
回答 1查看 2.2K关注 0票数 4

我正在为我的团队开发一个代码gen ( VSIX ),并且在与VSIX扩展框架进行了斗争之后,我正将Roslyn作为一个基本引擎来使用。

我的代码gen目前能够为解决方案生成一个新的csproj,并能够根据VSIX扩展性生成基于模板项目的样板代码库。我很有野心,我尽量不依赖静态模板项目,而是使用Roslyn来编写代码。

我的解决方案有一个文件夹列表,每个文件夹都有一个csproj列表。

我的问题1是,我试图使用来检测在代码编辑器中打开的当前文档(.cs),或者试图从解决方案资源管理器右键单击所选cs文件的当前文档id。

我尝试过使用AdhocWorkspace,到目前为止,它已经失败了,因为我无法得到任何。

问题2:如果我使用AdhocWorkspace,是否能够更改csproj属性中的默认命名空间?或者它不是目前Roslyn中功能的一部分?

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-06-14 08:56:30

对于第一种代码,我必须做同样的事情。我正在做一些关于光标的事情,所以我正在浏览caretPosition (游标)。还有其他的方法,但要点是一样的,得到当前的文本视图从那个到罗斯林。

您将需要安装Microsoft.CodeAnalysis.EditorFeatures.Text,它引入了分配的代码分析包,但允许您使用应用于ITextSnapshotGetOpenDocumentInCurrentContextWithChanges扩展。

代码语言:javascript
运行
AI代码解释
复制
private IVsEditorAdaptersFactoryService GetEditorAdaptersFactoryService()
    {
        IComponentModel componentModel =(IComponentModel)GetService(typeof(SComponentModel));
        return componentModel.GetService<IVsEditorAdaptersFactoryService>();
    }   
private Microsoft.VisualStudio.Text.Editor.IWpfTextView GetTextView()
{
    IVsTextManager textManager = (IVsTextManager)GetService(typeof(SVsTextManager));
    if (textManager == null)
        return null;
    IVsTextView textView = null;
    textManager.GetActiveView(1, null, out textView);
    if (textView == null)
        return null;
    return GetEditorAdaptersFactoryService().GetWpfTextView(textView);
}

//code to get the doc
Microsoft.VisualStudio.Text.Editor.IWpfTextView textView = GetTextView();
if (textView != null)
{
    SnapshotPoint caretPosition = textView.Caret.Position.BufferPosition;
    Document document = caretPosition.Snapshot.GetOpenDocumentInCurrentContextWithChanges();
//do stuff with Roslyn Document
}

“或者试图从解决方案资源管理器右键单击所选cs文件的当前文档id。”

这确实很难看,但我用的是一篇与众不同的文章(不记得作者了),这篇文章效果很好。

代码语言:javascript
运行
AI代码解释
复制
private static bool IsSingleProjectItemSelection(out IVsHierarchy hierarchy, out uint itemid)
    {
        hierarchy = null;
        itemid = VSConstants.VSITEMID_NIL;
        int hr = VSConstants.S_OK;

        var monitorSelection = Package.GetGlobalService( typeof( SVsShellMonitorSelection ) ) as IVsMonitorSelection;
        var solution = Package.GetGlobalService( typeof( SVsSolution ) ) as IVsSolution;
        if (monitorSelection == null || solution == null)
            return false;

        IVsMultiItemSelect multiItemSelect = null;
        IntPtr hierarchyPtr = IntPtr.Zero;
        IntPtr selectionContainerPtr = IntPtr.Zero;

        try
        {
            hr = monitorSelection.GetCurrentSelection( out hierarchyPtr, out itemid, out multiItemSelect, out selectionContainerPtr );
            if (ErrorHandler.Failed( hr ) || hierarchyPtr == IntPtr.Zero || itemid == VSConstants.VSITEMID_NIL)
                return false;
            // multiple items are selected
            if (multiItemSelect != null)
                return false;
            // there is a hierarchy root node selected, thus it is not a single item inside a project
            if (itemid == VSConstants.VSITEMID_ROOT)
                return false;

            hierarchy = Marshal.GetObjectForIUnknown( hierarchyPtr ) as IVsHierarchy;
            if (hierarchy == null)
                return false;

            Guid guidProjectID = Guid.Empty;

            if (ErrorHandler.Failed( solution.GetGuidOfProject( hierarchy, out guidProjectID ) ))
                return false;

            // if we got this far then there is a single project item selected
            return true;
        }
        finally
        {
            if (selectionContainerPtr != IntPtr.Zero)
                Marshal.Release( selectionContainerPtr );

            if (hierarchyPtr != IntPtr.Zero)
                Marshal.Release( hierarchyPtr );
        }
    }

IVsHierarchy hierarchy = null;
                uint itemid = VSConstants.VSITEMID_NIL;
                if (!IsSingleProjectItemSelection(out hierarchy, out itemid))
                    return;
                string itemFullPath = null;
                ((IVsProject)hierarchy).GetMkDocument(itemid, out itemFullPath);
                if (itemFullPath.EndsWith(".cs"))
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36218148

复制
相关文章
api网关怎么获取uri路径 api如何处理局部访问失败
api网关是一个新型的互联网安全体系。在新型的微服务架构当中,api网关充当的角色是不能取代的。它可以设置统一的鉴别入口帮助访客连接需求的不同的服务后端。并且提供负载均衡以及熔断限流安全监控等等非常重要的互联网应用功能。下面来了解一下api网关怎么获取uri路径。
用户8715145
2021/12/21
1.4K0
Google JS API 授权 失败
// 初始化OAuth2.0授权 const authenticate = () => { return gapi.auth2.getAuthInstance() .signIn({scope: "https://www.googleapis.com/auth/documents https://www.googleapis.com/auth/drive https://www.googleapis.com/auth/driv
拿我格子衫来
2022/01/24
4.1K0
Google JS API 授权 失败
Memos API 获取总条数
*更新:Memos 官方 amount API 已弃用。(Issues #1214)
eallion
2023/03/06
1.1K0
ip地址获取城市api
本接口api数据来源于 纯真ip库 地址 协议 方法 线路 https://api.zets.cn/api/ip https GET 国内 参数 值 可选 说明 data 要查询的ipv4 是 ip
Qicloud
2022/01/27
2.8K0
如何获取云API密钥?
云 API 是腾讯云开放生态的基石。通过云 API,只需少量的代码即可快速操作云产品;在熟练的情况下,使用云 API 完成一些频繁调用的功能可以极大提高效率;除此之外,通过 API 可以组合功能,实现更高级的功能,易于自动化, 易于远程调用, 兼容性强,对系统要求低。以下是具体操作步骤:
腾讯云@移动安全
2019/01/18
82.7K42
如何获取云API密钥?
自动获取QQ API源码
创建一个nic.php文件 代码如下 <?php header("Content-type: application/json; charset=utf-8"); $qq = $_GET['qq']
用户8099761
2023/05/11
1.2K0
Django 解决跨域访问API失败问题
https://www.djangoproject.com/download/2.0.13/tarball/
授客
2020/09/22
2.6K0
微信小程序----wx.getLocation(OBJECT) API在iOS关闭本机定位时,获取定位失败
问题 在做一个小程序时,进入首页需要获取用户的当前位置经纬度,然后去服务器查询当前位置周边的网吧。在安卓关闭定位设置时,wx.getLocation(OBJECT) API依然能够获取当前位置的经纬度;但是iOS如果关闭定位设置,wx.getLocation(OBJECT) API就会失败! 解决办法 微信小程序社区解决办法 根据官网解决的实际用法 Page({ onShow(){ // 获取当前地址 wx.getLocation({
Rattenking
2021/02/01
1.4K0
python中用requests获取API参数
不得不说这个第三方是真的好用,之前在写爬虫的时候就已经开始用啦。然后今天在写接口的时候,别人写的文章是用urllib的,但是我想用requests怎么办呢,怎么去兼容它呢,首先来打开中文文档http:
简单、
2018/07/18
2.6K0
安全可靠的短信验证码API,毫秒级反应
短信验证码是一种功能强大的网络安全技术,可以确保网站的真实性和安全性。它的使用非常简单:用户只需要通过他/她的手机发送位编码短信给网站,然后在网站上输入这个验证码,就可以实现一种双重认证的功能,从而让用户登录或注册的操作变得安全可靠。
不是海碗
2023/03/01
1.3K0
安全可靠的短信验证码API,毫秒级反应
金融数据获取的api接口
最近苹果的股价一路疯长,继周四突破万亿美元市值后,周五盘中高点、收盘价双创新高。盘中高点达208.74美元,收盘价报207.99美元,上涨0.29%,创历史收盘新高,市值达10045.76亿美元。
数据小磨坊
2018/08/16
8.2K0
金融数据获取的api接口
获取手机归属地免费API
1.百度免费api http://mobsec-dianhua.baidu.com/dianhua_api/open/location?tel=15850781443 返回示例 { "resp
用户6493868
2022/03/09
5.1K0
腾讯会议API - 获取REST API & Webhook应用对接信息
购买腾讯会议企业版或者商业版,将自动开通企业 API 接入能力,企业管理员可登录腾讯会议官网(https://meeting.tencent.com/),单击页面右上角【用户中心】,选择左侧菜单栏中的【高级】-【restApi】进入应用创建页面,点击添加应用即可创建密钥对。
liquid
2021/06/24
2.4K0
腾讯会议API - 获取REST API & Webhook应用对接信息
主动发送指令,但是没有反应,日志显示鉴权失败解决办法
这里少了一个空格
快乐的小白
2023/04/06
5460
主动发送指令,但是没有反应,日志显示鉴权失败解决办法
API网关Ocelot 使用Polly 处理部分失败问题
在实现API Gateway过程中,另外一个需要考虑的问题就是部分失败。这个问题发生在分布式系统中当一个服务调用另外一个服务超时或者不可用的情况。API Gateway不应该被阻断并处于无限期等待下游服务的状态。但是,如何处理这种失败依赖于特定的场景和具体服务。如果是产品信息服务无响应,那么API Gateway就应该给客户端返回一个错误。 Ocelot 是一个使用.NET Core平台上的一个API Gateway,最近我在参与这个项目的开发,开发完成第一个就是使用Polly 处理部分失败问题。各位同学可
张善友
2018/01/22
1.3K0
利用alertover发送获取响应失败的通知消息
本人在做接口自动化时候,因为服务器不稳定造成可能的用例失败,但这个失败表象只是在获取响应实体的json对象时为空,在后期排查问题时可能造成困扰,所以特意加了一个获取响应失败的通知,目的就是即使了解到服务器异常。暂时用的是免费的alertover,用了很久,简单可靠是它的优点,后续会加入微信提醒。分享代码,供大家参考。
FunTester
2019/09/10
1.4K0
C/C++ 调用API获取当前时间
#include <string> #include<iostream> #include<windows.h> #include <sstream> using namespace std; string WORDToString(WORD w) {     char tmpbuff[16];     sprintf(tmpbuff,"%d",w);     string res=tmpbuff;     return res; } string getTime() {     string week
王瑞MVP
2022/12/28
6750
抖音背景音乐获取API
有时候看到好看的抖音,听到喜欢听的背景音乐但音乐却没有在音乐软件上架怎么办?下面代码直接实现。
qiangzai
2021/12/21
2K0
抖音背景音乐获取API
Akismet插件获取key API的方法
作者:matrix 被围观: 2,308 次 发布时间:2011-09-25 分类:Wordpress 兼容并蓄 | 2 条评论 »
HHTjim 部落格
2022/09/26
6990
Akismet插件获取key API的方法
用API获取Bigone历史成交记录
Bigone中查看历史交易的功能并不友好,只能按时间范围查询,如果一笔订单分为许多次成交,界面里就列出多少条,而且还混杂着其它币种,想查清楚自己在哪个价格卖出多少,又在哪个价格买入了多少,只能手工一条一条地统计。看来bigone的程序员小哥自己肯定不炒币。
申龙斌
2018/07/27
7120
用API获取Bigone历史成交记录

相似问题

反应本地获取失败

11

反应本地API获取

23

反应componentDidMount获取api

20

获取API失败

141

SwiftUI: API获取失败

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档