小编dis*_*osr的帖子

为什么可选参数在Visual Studio 2015中传递错误的值?

我在VS2015中发现了一个奇怪的行为.以下是详细信息:

我有一个引用3.5程序集的.Net 4.6项目.这个程序集在其中一个接口中定义了我能够使用Resharper反编译器检查的以下方法.

void WriteString([MarshalAs(UnmanagedType.BStr), In] string data, [In] bool flushAndEND = true);
Run Code Online (Sandbox Code Playgroud)

记下最后一个可选参数flushAndEND,其默认值为true.现在的问题是当我在我的项目中使用这个方法时,将鼠标悬停在方法名称上会显示通常的VS toolTip,其中详细说明了方法签名,但对我来说它显示了可选参数的错误默认值flushAndEND.这是一个截图

在此输入图像描述

更糟糕的是,我注意到在运行时,WriteString只使用第一个参数调用方法时,flushAndEND设置为false而不是我引用的DLL中定义的默认值.这对我们的项目的影响是巨大的,因为它使我们的应用程序的一个重要功能无用,并阻止了我们的回归测试的大部分.

我能够通过在调用方法时强制将可选参数的值设置为true来克服此问题,但我担心在项目中的其他地方还有其他调用遇到同样的问题.所以我需要一个更好的解决方案,或者至少要了解这种行为背后的原因.

我们几周前刚刚升级了我们的环境.在我们使用VS2013之前,一切正常.

我知道确认的.Net 4.6错误导致一些参数传递错误的值,我可以将它与我的问题联系起来,但正如文章中所说,只有在编译x64架构时才会出现错误.我的项目是一个WPF应用程序,我们将其编译为x32.

为什么WriteString调用错误的默认参数?

我稍后会尝试在一个小项目中隔离问题,看看我是否可以重现这个问题.

编辑:我设法隔离了问题,发现了一些有趣的东西!

我创建了一个简单的.Net 4.6控制台应用程序,添加了对我的Dll的引用并编写了以下简单代码,包括向设备发送命令并读取响应:

private static void Main(string[] args)
    {

        //Init managers
        ResourceManager ioMgr = new ResourceManagerClass();
        FormattedIO488 instrument = new FormattedIO488Class();

        //Connect to the USB device
        instrument.IO = (IMessage)ioMgr.Open("USB0::0x0957::0x0909::MY46312358::0::INSTR");


        string cmd = "*IDN?";

        //This is the problematic method from my dll
        instrument.WriteString(cmd); …
Run Code Online (Sandbox Code Playgroud)

.net c# visual-studio visual-studio-2015 .net-4.6

24
推荐指数
1
解决办法
1958
查看次数

何时使用null vs String.empty调用INotifyDataErrorInfo.GetErrors?

InotifyDataErrorInfo.GetErrorsmsdn页面中,它表示使用参数调用GetErrors方法,该参数可以是:

  • 我们要为其检索错误信息的属性的名称
  • 空值
  • 的String.Empty

该文档没有说明何时使用null vs String.Empty调用此方法.我已经在我的应用程序中看到了这两种情况,我需要了解何时我可以期待其中一种情况.

澄清:我不是在问我应该如何实现GetErrors方法(我只是测试null和empty).问题更多的是要理解为什么WPF框架有时尝试使用null调用此方法,有时使用空字符串(我在我的应用程序中遇到了两种情况).如果目的是要求与特定属性无关的错误,为什么只有一个足够的时候为呼叫使用两个不同的值?

.net c# validation wpf

10
推荐指数
1
解决办法
1381
查看次数

是否可以在WPF应用程序中使用UWP API?

一个例子是Windows 10通用平台的新通知API.我可以在WPF应用程序中使用这组API吗?如果是这样有任何限制?

有关此文档的链接将非常感激.

c# wpf windows-10 uwp

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

为什么404页面包含内联CSS

我看到大多数404页面(例如在Html5BoilerPlate中)将CSS包含在<style>标签内的页面的Html代码中,而不是从外部工作表链接.我很确定人们是故意这样做的,并且背后有一些很好的理由,但我无法弄清楚他们为什么会这样做.

css html5boilerplate

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

是否可以将ValidationRules和INotifyDataErrorInfo的组合用于wpf验证?

在WPF中,有3种验证方法:

  • 验证规则
  • IDataErrorInfo
  • INotifyDataErrorInfo

是否可以同时使用它们的组合?对于我的需求,我想使用INotifyDataErrorInfo的灵活性来验证新规则,但是不想干扰要验证的同一对象的现有ValidationRules。

c# validation wpf idataerrorinfo inotifydataerrorinfo

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

为什么在VS中从“调试”更改为“发布”速度较慢?

我在Visual Studio中从事一个相当复杂的项目。每当我需要将配置从“调试”更改为“发布”时,更改最多需要20秒才能生效。VS在做什么,这证明了这么长的等待时间?

注意:我有一个不错的SSD驱动器和足够的RAM,以确保瓶颈不在硬件中。

debugging visual-studio

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