小编Jos*_*rty的帖子

如何禁用所有Roslyn代码分析器?

我正在尝试使用一个拥有少量Roslyn Code Analyzers的大型开源项目.当我打开解决方案时,Visual Studio使用~35%的CPU大约15分钟.使用PerfView我发现在解决方案上运行的代码分析器正在使Visual Studio陷入困境.

我知道可以在每个项目的基础上禁用分析器,但是这个解决方案包含100多个项目,所以我不想一个接一个地执行此操作.

我的问题:

  • 我可以为给定的解决方案禁用所有Roslyn分析器以避免这种情况吗?
  • 我可以在Visual Studio中为所有解决方案禁用所有Roslyn分析器吗?

c# analyzer visual-studio roslyn visual-studio-2015

25
推荐指数
8
解决办法
2万
查看次数

查找股票图表的最小最大值

股票

是否有任何特定的算法可以让我找到上图中的最小和最大点?

我有文本格式的数据,所以我不需要在图片中找到它.股票的问题在于他们拥有如此多的本地仓位和最大限度的简单衍生品将无法运作.

我正在考虑使用数字滤波器(z域),并平滑图形,但我仍然留下太多的局部最小值和最大值.

我也尝试使用移动平均线来平滑图形,但我又有太多的最大值和分钟.

编辑:

我读了一些评论,但我没有意外地圈出一些最小值和最大值.

我想我想出了一个可行的算法.首先找到最低点和最高点(当天的高点和当天的低点).然后画出三条线,一条从开到高或低,先从一条线到一条线从低到高或从高到低,最后再闭合.然后在这三个区域中的每一个中找到距离线最远点的点作为我的高和低然后重复循环.

algorithm finance stocks

22
推荐指数
2
解决办法
8742
查看次数

将自定义编辑器窗口添加到Visual Studio窗口窗格

我的问题

我正在尝试构建一个Visual Studio扩展,它允许在每个函数的基础上编译代码,而不是基于每个文件.我基本上试图以类似于Microsoft Debugger Canvas的方式显示代码.

我想知道如何在一个窗口中托管多个Visual Studio编辑器(我相信windows正在实现IVsWindowFrame).我所追求的功能如下所示:

Microsoft Debugger Canvas

每个编辑器窗口都保留了典型功能,并按预期与第三方扩展进行交互.(例如,VsVim在这些窗口中正常运行).

我试过的

我花了将近两周的时间来研究和尝试这些东西,并且我在确定我将使用哪些服务,接口和类时遇到了很多麻烦.

通过MSDN阅读

首先,大多数文档讨论了如何编辑单个编辑器窗口以及添加装饰,标签,边距等.它没有讨论在窗口窗格中生成多个编辑器的可能性.

我已经通过文件枕着一个广大感兴趣的我,包括接口IVsTextBuffer,IVsTextViewIVsInvisibleEditor.不幸的是,我不能让这些接口中的一些很好地一起玩.

最重要的是,通常优秀的MSDN在这方面非常缺乏.许多接口只包含一个成员列表,甚至没有关于预期用途和功能的基本注释.(例如,IComponentModel).

许多接口都引用了一组编辑器示例,但无法在MSDN上读取或下载代码.显然它随Visual Studio 2005一起提供,但我没有这个版本的Visual Studio,也找不到它.

与IVsUIShell交互

我可以访问所有打开的WindowFrame,IVsUIShell.GetDocumentWindowEnum(); 我看到有一个IVsUiShell.CreateDocumentWindow()方法,但我完全不熟悉它接受的参数,或者这是否是正确的路径.

我需要做什么

  1. 以编程方式创建可停靠的窗格
  2. 以编程方式将编辑器添加到此窗口窗格.(并确保它们在Visual Studio,正在运行的文档表等中正确注册)

编辑:

对不起,我应该扩展我的步骤.当我说我需要注册正在运行的文档表和Visual Studio时,这是因为我想在我的自定义编辑器中实际编辑原始文档.下面是我正在尝试重新创建的Debugger Canvas中可用功能的简短示例:

http://i.imgur.com/aYm8A5E.gif(我无法嵌入.gif文件)

或者:

如果有人知道我在哪里可以找到Visual Studio 2005附带的编辑器示例,例如基本编辑器示例,我相信我可以想出这些东西.MSDN文档没有关于这些接口的代码示例,这使我的工作非常困难.

c# mef editor visual-studio visual-studio-extensions

22
推荐指数
2
解决办法
3479
查看次数

登录使用Live.com身份验证的站点

我一直在尝试自动登录我经常访问的网站www.bungie.net.该站点与Microsoft和Xbox Live相关联,因此在人们登录其站点时使用Windows Live ID API.

我对创建网络蜘蛛/机器人比较陌生,我担心我会误解一些最基本的概念.我已经模拟登录到其他网站,如Facebook和Gmail,但live.com给了我一些麻烦.

无论如何,我一直在使用Wireshark和Firefox插件篡改数据来试图弄清楚我需要发布什么,以及我需要包含哪些我的请求.据我所知,这些是登录此站点必须遵循的步骤.

1.访问HTTPS://login.live.com/login.srf?wa=wsignin1.0&rpsnv=11&ct=1268167141&rver=5.5.4177.0&wp=LBI&wreply=http:%2F%2Fwww.bungie.net%2FDefault.aspx&id=42917

2.收到MSPRequ和MSPOK的cookies.

3.将表单ID"PPSX"中的值,表单ID"PPFT"中的值,您的用户名,密码全部发布到更改的URL,类似于:https://login.live.com/ppsecure/post. srf?wa = wsignin1.0&rpsnv = 11&ct =(在该URL的末尾有一些数字会发生变化)

4. Live.com向用户返回一个包含更多隐藏表单的页面.然后,客户端从表单"ANON"的帖子的值,从表"ANONExp"的值,并从表"T"的URL的值:HTTP://www.bung ie.net/Default.aspx?wa = wsignin1.0

5.在发布该数据之后,向用户返回各种cookie,其中最重要的是"BNGAuth",即该站点的登录cookie.

我遇到麻烦的地方是第五步,但这并不意味着我已经正确完成了所有其他步骤.我发布了来自"ANON","ANONExp"和"t"的数据,但我没有返回一个BNGAuth cookie,而是返回了一个名为"RSPMaybe"的cookie并重定向到主页.

当我查看Wireshark日志时,我注意到当我使用Firefox登录时以及我的程序运行时,日志与我之间的不同之处.它可能没什么但我会在这里附上图片供你查看.在第四步发布数据之前,我正从网站返回一个HTTP数据包.我不确定这是怎么回事,但它必须是我在HTTPS步骤中做错的一个副作用.

using System;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Text;
using System.Net;
using System.IO;
using System.IO.Compression;
using System.Security.Cryptography;
using System.Security.Cryptography.X509Certificates;
using System.Web;

namespace SpiderFromScratch
{
    class Program
    {   
        static void Main(string[] args)
        {
            CookieContainer cookies = new CookieContainer();
            Uri url = new Uri("https://login.live.com/login.srf?wa=wsignin1.0&rpsnv=11&ct=1268167141&rver=5.5.4177.0&wp=LBI&wreply=http:%2F%2Fwww.bungie.net%2FDefault.aspx&id=42917");
            HttpWebRequest http = (HttpWebRequest)HttpWebRequest.Create(url);

            http.Timeout = 30000;
            http.UserAgent …
Run Code Online (Sandbox Code Playgroud)

c# authentication https http

12
推荐指数
1
解决办法
7322
查看次数

如何在Visual Studio编辑器中使用投影缓冲区来支持嵌入式语言

在此链接的第一段末尾,它指出:

Visual Studio文本概述功能是通过使用投影缓冲区来隐藏折叠文本来实现的,而ASP.NET页面的Visual Studio编辑器使用投影来支持嵌入式语言,如Visual Basic和C#.

我已经搜索和搜索但是没有找到任何示例或文档来完成此任务,有没有人知道这是如何完成的?我已经进行了分类工作并创建了一个我想要归类为C#代码的跨度的投影缓冲区.我将缓冲区上下文类型设置为"CSharp",但跨度从未被分类.我也尝试将我的内容类型设置为"投影",但现在也可以.

c# visual-studio languageservice

12
推荐指数
3
解决办法
1256
查看次数

使用Roslyn查找属性"invocations"

我正在尝试构建C#方法和属性的调用图.这实质上意味着我搜索项目MethodDeclarationSyntaxPropertyDeclarationSyntax节点.然后,我通过以下方式查找方法调用,在这些节点之间建立连接:

SyntaxNode node = ...; //Some syntax node
var methodInvocations = node.DescendantNodesAndSelf().OfType<InvocationExpressionSyntax>();
//Process these method invocations
Run Code Online (Sandbox Code Playgroud)

是否有类似的方法或推荐的方法来查找所有属性"调用"?我相信C#编译器会在编译时将属性分解为Getter和Setter函数.

使用Roslyn检测属性使用的最佳方法是什么?

c# properties roslyn

9
推荐指数
1
解决办法
1071
查看次数

查找从给定的INamedTypeSymbol继承的类型

给定INamedTypeSymbol(来自引用的程序集,而不是源代码)如何找到从此类型继承的所有类型(在源程序集和引用程序集中)?

在我的特殊情况下,我正在寻找所有继承的类型NUnit.Framework.TestAttribute.我可以访问命名类型符号,如下所示:

var ws = MSBuildWorkspace.Create();
var soln = ws.OpenSolutionAsync(@"C:\Users\...\SampleInheritanceStuff.sln").Result;
var proj = soln.Projects.Single();
var compilation = proj.GetCompilationAsync().Result;

string TEST_ATTRIBUTE_METADATA_NAME = "NUnit.Framework.TestAttribute";
var testAttributeType = compilation.GetTypeByMetadataName(TEST_ATTRIBUTE_METADATA_NAME);

//Now how do I find types that inherit from this type?
Run Code Online (Sandbox Code Playgroud)

我已经采取一看SymbolFinder,CompilationINamedTypeSymbol,但我没有任何运气.

编辑:FindDerivedClassesAsync方法看起来接近我需要的.(我不是100%确定它在引用的程序集中找到派生类).不过它是内部的,所以我开了一个问题.

c# roslyn

9
推荐指数
1
解决办法
757
查看次数

以编程方式调用EntityDeploy构建任务

我正在使用Roslyn编译,发出和运行C#源代码.但是,当遇到使用EntityFramework的项目时,我遇到了限制.

似乎只是简单地发出编译是不够的,因为有一个EntityDeploy构建任务在它们被发出后操纵它们.(我相信它在发布后会在DLL中嵌入元数据工件).

.csproj我正在处理的文件中,我看到以下实体部署任务:

<EntityDeploy Include="Models\Northwind.edmx">
  <Generator>EntityModelCodeGenerator</Generator>
  <LastGenOutput>Northwind.Designer.cs</LastGenOutput>
</EntityDeploy>
Run Code Online (Sandbox Code Playgroud)

是否可以直接调用此构建任务并操纵我发出的DLL?

注意:我不想简单地调用msbuild.exe或运行文件中的MSBuild所有内容 .csproj.我正在构建的项目存在于内存中,但不存在于磁盘上,因此在我的情况下不起作用.

我尝试过的:

我正在努力学习如何使用这些Microsoft.Build.Evaluation东西.我可以找到EntityDeploy任务,但我对如何调用它(以及我应该提供的参数)感到茫然.

var project = new Project(@"C:\Users\JoshVarty\Documents\Visual Studio 2015\Projects\WebApplication1\WebApplication1\WebApplication1.csproj");
//Get the entity deploy target? I'm not sure if this is a task or target.
var entityDeploy = project.Targets.Where(n => n.Key == "EntityDeploy").Single();

var projectTargetInstance = entityDeploy.Value;
Run Code Online (Sandbox Code Playgroud)

我也尝试查看EntityDeploy磁盘上存在的构建任务.

var entityDeployTask = new Microsoft.Data.Entity.Build.Tasks.EntityDeploy();
entityDeployTask.Sources = //I'm not sure where I can get the ITaskItem[] I need …
Run Code Online (Sandbox Code Playgroud)

.net c# msbuild entity-framework

9
推荐指数
1
解决办法
1065
查看次数

C中结构数组的静态初始化

我有一个关于C语言中结构数组初始化的问题.谷歌搜索告诉我很多人都有非常相似的问题,但它们并不完全相同.

基本上,我有一个全局的结构类型"memPermissions"如下所示.在程序执行时,该数组需要将所有"address"和"ownerId"字段初始化为-1.

typedef struct memPermissions {
    int address;
    int ownerId;
} *test;
Run Code Online (Sandbox Code Playgroud)

问题是数组的大小是使用#define,所以我不能简单地去:

#define numBoxes 5

struct memPermissions memPermissions[numBoxes] = {
{-1, -1},
...
{-1, -1}
};
Run Code Online (Sandbox Code Playgroud)

我试过了:

struct memPermissions memPermissions[numBoxes] = {-1, -1};
Run Code Online (Sandbox Code Playgroud)

但自然这只是初始化了第一个元素.(其余的被设置为0).跳到脑海的唯一解决方案是在某个地方用一个简单的循环初始化它,但由于这个代码运行的地方的性质,我真的希望这不是我唯一的选择.

有没有办法在没有循环的情况下初始化这个结构数组的所有元素?

干杯, - 乔什

c arrays struct initialization

7
推荐指数
2
解决办法
9656
查看次数

Roslyn的GetTypeByMetadataName()和Generic Types

我正在尝试检索给定类型中的所有IMethodSymbols.对于封闭类型(即没有泛型的类型),我可以使用CSharpCompilation.GetTypeByMetaDataName()并传入完全限定的类型名称.

但是,对于开放类型(例如MyClass<T>),完全限定名称似乎不起作用.我已经尝试提供没有type参数(MyClass)的完全限定名称,也提供了一个封闭类型(MyClass<int>),但似乎都没有.

使用完全限定名称查找此类型的最佳方法是什么?

c# types roslyn

6
推荐指数
1
解决办法
1081
查看次数