小编Ast*_*tor的帖子

为什么"指定的强制转换无效"错误*不*暴露根本原因?

只是偶然发现了一个简单的错误,它提示了一个有趣的问题.环境:VS 2010,NET.4,C#.从SQL sproc获取返回值会产生"指定的强制转换无效"异常:

cm.Parameters.Add( "@si", SqlDbType.SmallInt ).Direction=   ParameterDirection.ReturnValue;
..
cm.ExecuteNonQuery( );
short   siRetVal=   (short) cm.Parameters[0].Value;     // exception here
Run Code Online (Sandbox Code Playgroud)

由于代码在调试模式下运行并在该行中断,我输入了立即窗口:

?(short) cm.Parameters[0].Value
Run Code Online (Sandbox Code Playgroud)

结果是:

Cannot unbox 'cm.Parameters[0].Value' as a 'short'
Run Code Online (Sandbox Code Playgroud)

好吧,SQL sproc返回一个32位int(不是short我最初想到的16位),这解释了异常.应该为此参数使用适当的宽度 - 没有问题.

但任何人都可以解释为什么错误的根本原因仅在立即窗口中报告?Exception Helper中没有公开任何细节,内部异常为空.知道确切原因不是有益的吗?我认为它会使错误分析更简单,不是吗?


编辑:添加截图; 堆栈跟踪似乎没有暗示任何ADO.NET代码(我没想到).更重要的是,如果我将ret-value参数"声明"保留为SmallInt,但提供一个适当宽度的变量(或如图所示),适应一个int,一切正常!我很确定这与ADO/SQL没有任何关系.

我相信@HansPassant揭示了这里发生的事情的真实本质,我倾向于接受这个作为答案.尽管发现托管代码甚至无法向我提供有关执行状态的准确详细信息(例如,哪个引用实际上为null - 如上所述,或者在此无效转换的情况下),这有点令人失望.

c# .net-4.0

15
推荐指数
1
解决办法
2215
查看次数

以编程方式更新ClickOnce应用程序的部署清单会导致缺少<compatibleFrameworks>元素,这在4.0中是必需的

我正致力于自动化.NET 4.0 ClickOnce WPF应用程序的安装程序,该应用程序需要在app.config文件中设置一些项目.我已经经历了一个棘手的过程,即找到我必须遵循的特定步骤,使用Mage.exe(即更新并重新签名应用程序和部署清单),现在我正在尝试将其自动化以进行安装.

我选择使用.deploy扩展来最小化IIS/Internet Explorer安全机制的问题,因此基本上算法如下(基于ClickOnce(Saurabh Bhatia)中的签名和重新签名清单以及使用Mage的ClickOnce WPF应用程序的更新配置或MageUI,作为主要来源之一):

  1. 转到该\Application Files\App_%HighestVersion%\文件夹
  2. 删除包含它的文件的.deploy扩展名
  3. 跑  mage -u %app%.exe.manifest -cf cert.pfx
  4. 恢复.deploy扩展
  5. 跑  mage -u %app%.application -appm %app%.exe.manifest -cf cert.pfx
  6. 复制%app%.application2级(到..\..- 部署根)

如果手动完成,那将非常有效.我可以运行一个.cmd文件,根据环境细节(路径等)进行自定义,但是我需要包含mage.exe在部署中,以及Microsoft是否允许我们这样做对我来说是一个悬而未决的问题.因此,我正在尝试在Installer课堂上执行类似的操作:

X509Certificate2 ct = new X509Certificate2(sPathCert);

//  .. Remove .deploy extension (for files in the sPathApp folder).

sPathMft = Directory.GetFiles(sPathApp, "*.exe.manifest")[0];
ApplicationManifest am = …
Run Code Online (Sandbox Code Playgroud)

c# installation clickonce .net-4.0

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

WPF ComboBox.SelectedValue为null,但.SelectedItem不为; SelectedValuePath已设置.为什么?

调试一个奇怪的NullRefException我看到如下图:

双击显示.SelectedItem

所以当代码引用.SelectedValue它崩溃时.

我无法理解如何.SelectedItem设置,但.SelectedValue不能.调试器查看器中显示的值是正确的,.SelectedIndex也是合适的.ComboBox .ItemsSource设置为List<DvcTypes>代码:

cbAdmDvc.ItemsSource =  J790M.DAL.DvcTypes.GetList( );
Run Code Online (Sandbox Code Playgroud)

.SelectedValuePath 在XAML中设置:

<ComboBox Name="cbAdmDvc" DisplayMemberPath="sDvcType"
  SelectedValuePath="tiDvcType" SelectionChanged="cbAdmDvc_SelectionChanged".. />
Run Code Online (Sandbox Code Playgroud)

下拉部分.sDvcType稍后正确显示标签.
非常相同的实现适用于一堆其他过滤组合框(另外7个).
这在主窗口的Loaded事件期间发生.

wpf combobox .net-4.0

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

WebSetupProject中的IIS启动条件无法检测Win10上的IIS 10

我们的WebSetupProjects(在VisualStudio 2010中创建)无法正确检测Win10上的IIS版本.

我的想法是它与这个条件拼写的方式有关 - 请注意双引号:

     (IISMAJORVERSION >= "#5" AND IISMINORVERSION >= "#1") OR IISMAJORVERSION >= "#6"
Run Code Online (Sandbox Code Playgroud)

所以即使注册表检查在HKLM\SYSTEM\CurrentControlSet\Services\W3SVC\Parameters用于MajorVersionMinorVersion返回双字整数值,它们被强制为字符串表示,因此导致"10"是比"5"或"6" -因此不能检查.

我还没有尝试删除双引号,但我担心它们可能存在原因(即没有它们检查将无法正常工作).不过,一旦我有机会,我会尝试这一点,并会报告.

在此期间,有没有人遇到过相同的场景,并找到了如何解决它?

asp.net iis visual-studio-2010

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