小编Iga*_*nik的帖子

C#:我想像文件路径一样将消息传递给我的表单应用程序,比如控制台应用程序,我该怎么做?

C#:我想像文件路径一样将消息传递给我的表单应用程序,比如控制台应用程序,我该怎么做?

我被告知我需要找到我的主要方法来添加string [] args,但我不知道哪个是Windows窗体.我的主要方法是哪种C#windows窗体应用程序?

c# command-line arguments winforms

7
推荐指数
1
解决办法
1986
查看次数

在C#中解析JavaScript代码

我有以下JavaScript代码作为字符串文字:

var $Page = new function()
{
    var _url= 'http://www.some.url.com';

    this.Download = function()
    {
        window.location = _url;
    }
}
Run Code Online (Sandbox Code Playgroud)

有没有办法_url从C#代码中获取变量的值?也许是一个开源库?我使用正则表达式做了这个,但我希望有一个更优雅的方式.

.net javascript c# parsing

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

仅当任务未在指定时间内完成时才显示进度对话框

我有一个上传图像的小服务,我这样使用它:

ImageInfo result = await service.UploadAsync(imagePath);
Run Code Online (Sandbox Code Playgroud)

我想要做的是显示进度对话框,但前提是上传操作需要超过2秒.上传完成后,我想关闭进度对话框.

我使用Task/ContinueWith做了一个粗略的解决方案,但我希望有一种更"优雅"的方式.

我怎样才能实现这个目的async/await

.net c# task-parallel-library async-await

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

COM TreatAs如何(以及何时)起作用?

我正在查看vsjitdebugger.exe使用Process Monitor的注册表访问,我注意到有时以下列方式查询注册表(一些信息省略):

HKCU\Software\Classes\CLSID\{some-guid} NAME NOT FOUND  Desired Access: Read
...
HKCU\Software\Classes\CLSID\{some-guid}\TreatAs NAME NOT FOUND  Desired Access: Query Value
...
HKCU\Software\Classes\CLSID\{some-guid}\InprocServer32  NAME NOT FOUND  Desired Access: Read
...
HKCR\CLSID\{24E669E1-E90F-4595-A012-B0FD3CCC5C5A}\InprocServer32    SUCCESS Desired Access: Read
Run Code Online (Sandbox Code Playgroud)

有关MSDN上的TreatAs的信息表明,它允许为另一个将被调用而不是原始服务器的COM服务器指定GUID.

我无法找到关于此密钥的更多信息,并且我无法在我自己的COM对象上使用它:我有两个不同的相同COM对象的实现(在2个单独的DLL中,有2个单独的GUID) ,当我的进程通过GUID创建对象时,我希望它创建另一个对象(通过TreatAs中指定的GUID).不幸的是,似乎Windows立即尝试查询HKCU\Software\Classes\CLSID\{my-guid}\InprocServer32,而不是首先寻找TreatAs.

我的问题基本上是关于TreatAs的规则,何时以及如何被查询?

com registry clsid

5
推荐指数
1
解决办法
1452
查看次数

使用Rx,每隔60秒进行一次最后一次触发事件

我有一个事件(可能)每秒触发一次(计时器滴答).我想做的是EventArgs每60秒采取最后一个滴答值(如果在这60秒内有新的滴答).我尝试过这样的事情:

Observable.FromEventPattern(
    h => myThing.SomeEvent += h,
    h => myThing.SomeEvent -= h)
        .Throttle(TimeSpan.FromSeconds(60))
        .TakeLast(1)
        .Do(p => // do something with p);
Run Code Online (Sandbox Code Playgroud)

不幸的是我从来没有采用这种Do方法,而且我不确定我做错了什么?

抱歉,如果这是完全错误的,我第一次使用Rx :)

编辑:按照下面的建议,我换DoSubscribe,但我还没有得到任何结果,如果我使用Throttle.我应该使用它吗?

c# events system.reactive

5
推荐指数
2
解决办法
1806
查看次数

在%temp%中读取文件时出现Random UnauthorizedAccessException

我有一个将文件写入临时目录的进程.正在写入文件而没有共享读取访问权限,因此如果有人在写入文件时尝试读取该文件,IOException则会抛出该文件,这很好.

在一些罕见的情况下,我似乎UnauthorizedAccessException在尝试阅读此文件时得到了.我相当肯定(从日志中)文件没有写入,但我看不到任何其他原因我无法访问它.

此外,该过程从Visual Studio扩展运行,这意味着它具有与父进程(Visual Studio本身)相同的权限.

以下是我尝试打开文件的方法:

new FileStream(cacheFileName, FileMode.Open, FileAccess.Read, FileShare.Read);
Run Code Online (Sandbox Code Playgroud)

有时候,这条线会抛出一条线UnauthorizedAccessException.有什么想法吗?

.net exception

5
推荐指数
1
解决办法
544
查看次数

在不使用devenv/setup的情况下通过MSI注册解压缩的VSIX扩展

我们有一个Visual Studio扩展,目前安装有MSI,因为我们需要在安装后执行某些任务(ngen,注册某些COM服务器等).在安装结束时,我们运行devenv.exe /setup(更具体地说,devenv.exe /setup /nosetupvstemplates使其快一点)在Visual Studio 2012及更高版本中注册扩展(在2010年不需要此步骤,因为VS2010将在每次启动时重建扩展缓存) .

我们目前正在寻求部分VSIX安装,但存在一些问题:

  1. 我们有一定的文件夹结构(附加的捆绑工具).我无法在VSIX包中找到包含任意文件夹和文件的选项.这可能吗?

  2. 我们试图避免使用devenv.exe /setup,因为在极少数情况下,这可能会导致扩展无法加载(如MSDN论坛上的Remco Mulder所详述).

  3. 我们仍然需要执行"安装后"操作,目前VSIX无法实现.

  4. 由于之前的'sins',我们硬编码了一些路径来使用CompanyName\ProductName\VersionVSIX软件包过去遵循的格式,但似乎VSIX randomy现在生成一个文件夹名称(正如Jason在下面的答案中提到的那样).

所以我真正喜欢的是能够安装一个"解压缩的"VSIX包 - 让MSI安装程序在磁盘上创建文件结构(在正确的位置%VSInstallDir%\Common7\IDE\Extensions\Company\Product\Version),然后以某种方式让VSIX使用该.vsixmanifest文件来注册Visual Studio中的扩展.

(初始挖掘到扩展管理器API示出了有一个名为方法CreateInstalledExtensionExtensionManagerService,在一个路径花费vsixmanifest,组装时Microsoft.VisualStudio.ExtensionManager.Implementation.dll,但不幸的是它是内部).

因此,如果不使用API​​ hackery,有没有其他方法可以在Visual Studio(2012及更高版本)中实际安装扩展,而不使用devenv /setup

windows-installer visual-studio vsix visual-studio-extensions

5
推荐指数
2
解决办法
2144
查看次数

将最近的提交放在Mercurial(Hg)的单独(命名)分支中

如果自上次推送以来我对默认分支进行了多次提交,是否可以返回,并将这些提交移动到单独的命名分支中?

也就是说,我有:

A--B--C--D
Run Code Online (Sandbox Code Playgroud)

而且我要:

A
 \
  B--C--D
Run Code Online (Sandbox Code Playgroud)

我希望这是有道理的?

mercurial branch tortoisehg

4
推荐指数
1
解决办法
79
查看次数

使用FakeItEasy进行伪造方法调用会引发事件吗?

我正在努力做一些事情:

A.CallTo(() => fakeTimer.Start()).Invokes(() => 
    fakeTimer.Elapsed += Raise.With<ElapsedEventArgs>(ElapsedEventArgs.Empty).Now);
Run Code Online (Sandbox Code Playgroud)

根据这个答案,它fakeTimer是一个假的ITimer,一个包装器接口.

显然这不起作用,因为我无法在Experssion Tree中进行任务.

我实际上要实现的是Start在调用方法时模拟提升计时器事件.这样我就可以断言Start确实发生了一次调用.

任何(替代)想法?

编辑我是个白痴,错是我自己的!我不小心添加了一个额外的A.CallTo,我不应该.我没有删除这个问题,而是继续授予PatrikHägne他的合法声誉:)

c# mocking fakeiteasy

4
推荐指数
1
解决办法
1428
查看次数

Jenkins执行PowerShell脚本

我正在尝试从Jenkins运行PowerShell脚本,但它似乎完全忽略了执行策略!这可以通过直接执行powershell.exe或使用PowerShell插件来实现

附加信息:

Jenkins作为Windows服务运行(使用本地系统帐户,非交互式).确实连接到该服务器并检查执行策略RemoteSigned:

PS C:\> whoami
nt authority\system

PS C:\> Get-ExecutionPolicy
RemoteSigned
PS C:\>
Run Code Online (Sandbox Code Playgroud)

但是,在运行Jenkins构建时,情况并非如此.这是在Get-ExecutionPolicy -List构建步骤中执行的输出:

d:\workspace\test-job>powershell Get-ExecutionPolicy -list 
  Scope                         ExecutionPolicy
  -----                         ---------------
  MachinePolicy                 Undefined
  UserPolicy                    Undefined
  Process                       Undefined
  CurrentUser                   Undefined
  LocalMachine                  Undefined
Run Code Online (Sandbox Code Playgroud)

我也尝试从构建步骤中明确设置它,没有.

我错过了什么?

windows powershell jenkins jenkins-plugins executionpolicy

4
推荐指数
1
解决办法
4028
查看次数