请求:
我希望能够编写一个分析器,它可以为某个表达式提供代理值并触发重新解析文档.
动机:
我们的代码中充斥着ABTests,它们可以处于已部署或处于活动状态且具有控制和变体组.确定测试的状态是通过数据库查找完成的.对于使用控制组部署的测试,以下表单的任何语句都将计算为false:
if(ExperimentService.IsInVariant(ABTest.Test1))
{
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试提供工具,以便在开发时通过在这种情况下将其变灰来更容易处理.事实上,这是相当有限的,并不健壮,因为我基本上必须自己玩解析器.
如果实际代码是什么
if(!ExperimentService.IsInVariant(ABTest.Test1))
Run Code Online (Sandbox Code Playgroud)
要么
if(ExperimentService.IsInVariant(ABTest.Test1) || true)
Run Code Online (Sandbox Code Playgroud)
要么
var val = ..... && (ExperimentService.IsInVariant(ABTest.Test1);
if(val){
// val is always going to be false if we deployed control.
}
Run Code Online (Sandbox Code Playgroud)
我可以看到的一种可能的方法是允许我们编写一次触发的分析器并在实际的IDE解析发生之前重写树(或者,好吧,只是再次解析它).这些应该只发射一次并允许我们用另一个表达式替换某个表达式.这将允许我交换所有这些实验调用的真假文字.
因此,这些部分可以从所有其他IDE功能中受益,例如代码灰化无法访问的代码,还有更复杂的代码,例如永远不会有不同值的变量
显然这仅仅是一个例子,我不确定它是多么可行.对于正确的功能或已经存在的东西的任何建议都非常受欢迎.
我在Visual Studio 2010中使用ReSharper 8.0.ReSharper 8.0使用基于NuGet的Extension Manager进行插件管理,这使得查找和安装插件非常容易,但是这个Extension Manager只提供任何给定插件的最新版本.它还跟踪插件更新,并提供在新版本可用时更新插件.
这就是我的问题出现的地方.我使用(GoToWord)的特定插件已更新,并且最新版本(0.9.3)似乎无法正常工作.我无法以任何方式回滚到以前的好版本(0.9.1.1),也没有办法在我卸载它之后安装旧版本.
我试过打开常规的NuGet包管理器控制台(at Tools | Library Package Manager | Package Manager Console)并发出以下命令:
Install-Package resharper.GoToWord -version 0.9.1.1
Run Code Online (Sandbox Code Playgroud)
但这在依赖解析阶段失败了,大概是因为常规 NuGet 不知道ReSharper :
Run Code Online (Sandbox Code Playgroud)Attempting to resolve dependency 'ReSharper (? 8.0)'. Install-Package : Unable to resolve dependency 'ReSharper (? 8.0)'. At line:1 char:16 + Install-Package <<<< resharper.GoToWord -version 0.9.1.1 + CategoryInfo : NotSpecified: (:) [Install-Package], InvalidOperationException + FullyQualifiedErrorId : NuGetCmdletUnhandledException,NuGet.PowerShell.Commands.InstallPackageCommand
NuGet的ReSharper Extension Manager版本是否有控制台?或者是否有其他方法来安装旧版本的插件?
resharper visual-studio-2010 resharper-plugins resharper-8.0