小编kmo*_*ote的帖子

为什么序列化回调方法不能虚拟?

我有一个反序列化方法(用[OnDeserialized()]属性修饰),我想在派生类中重写它.当我尝试这样做时,我收到以下运行时错误:

类型的未处理的异常"System.TypeLoadException" ....类型"BaseObj"在组件...具有方法"OnDeserialization",这是静态的,虚拟的,抽象的或通用的,但被标记为一个序列化回调方法.

我找不到任何确认序列化回调限制的文档(错误消息本身除外).有谁可以解释这个奇怪的限制?

根据这里的评论中的建议,我使用OnDeserialization方法调用一个单独的虚函数,如下所示:

[Serializable()]
public class BaseObj
{   
    protected string obj { get; set; } 

    [OnDeserialized()]
    public void OnDeserializedMethod(StreamingContext context)
    {
        //call the virtual method because deserialization callbacks can’t be virtual
        onDeserialized(context);
    }    
    virtual protected void onDeserialized(StreamingContext context)
    {
        obj = "This value was deserialized by the base class.";
    }   
}
[Serializable()]
public class DerivedObj : BaseObj
{    
    override protected void onDeserialized(StreamingContext context)
    {
        obj = "This value was deserialized by the derived class."; …
Run Code Online (Sandbox Code Playgroud)

.net c# serialization json.net

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

在SQL Server Management Studio上使用解决方案/项目

[我在dba.stackexchange上发布了一个相关的问题,但收到的回复很少,所以我想我会在这里发布.]

MSDN文档是精神分裂症.在官方SQL Server文档中,我们被告知不推荐使用"解决方案,项目和项目".警告横幅上写着,

"此功能将在未来版本的Microsoft SQL Server中删除.请避免在新的开发工作中使用此功能,并计划修改当前使用此功能的应用程序."

但是,在MSDN文档的其他地方,使用Projects&Solutions仍然是存储脚本等的规定方法.

那么您建议用于存储和打包构成数据库应用程序的各种脚本,查询和文件?我也非常有兴趣知道你们当中是否有人正在使用当前工作中的解决方案或项目框架,以及你使用它们的方式.

[注:我知道,我可以用VS2010实现此功能,但我只在SSMS-基础的方法感兴趣我的团队的其他成员没有访问VS(也用于在回答中表达的原因这个问题) ]

我特别热衷于找到在团队中共享SQL语句和查询的最佳实践 - 您是否会使用项目/解决方案(在源代码管理中备份)?或者自定义模板?

sql-server-2008

8
推荐指数
1
解决办法
3624
查看次数

C#中枚举的默认访问修饰符

根据MSDN 此处此处(以及此qstn接受答案),枚举的默认可访问性是public.但是,这段代码:

public class Test
{
    enum Color { RED, BLUE, GREEN };
    public void SetColor(Color c) { }
}
Run Code Online (Sandbox Code Playgroud)

会引发这个编译错误:

Error 1 Inconsistent accessibility: parameter type 'Test.Color' is less accessible than method 'Test.SetColor(Test.Color)'

(这与将枚举设置为时出现的错误相同private.)此错误只能通过显式修改枚举来解决public.文档不正确吗?

[我正在使用C#2010和.NET 4.0进行编译.]

c# oop enums

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

如何从身份验证代理后面运行svcutil.exe

我想运行该svcutil.exe工具来访问互联网上的Web服务.不幸的是,每当我尝试时,我都会收到一堆包含以下消息的错误:

请求失败,HTTP状态为407:需要代理身份验证(ISA Server需要授权才能完成请求.拒绝访问Web代理筛选器.

正如我从这篇相关文章中了解到(这里更多详细信息),问题是我坐在验证代理后面.该帖子解释说我需要编辑app.config文件,但我无法弄清楚如何做到这一点.我想我会使用这个 /svcutilConfig:alternate_app.config开关,但我不知道如何构造一个有效的.config文件来传递给那个开关.svcutil.exe使用的默认app.config文件是什么?

wcf svcutil.exe

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

是否有VS快捷方式在向方法签名添加新参数时自动更新三斜杠注释?

Visual Studio的漂亮的自动记录功能允许您在方法之前键入三个斜杠('///')以自动生成xml样式的文档存根,如下所示:

    /// <summary>
    /// 
    /// </summary>
    /// <param name="bar"></param>
    /// <param name="baz"></param>
    /// <returns></returns>
    public int foo(bool bar, string baz)
    {
        return 0;
    }
Run Code Online (Sandbox Code Playgroud)

如果我编辑签名并添加新参数,是否有用于更新注释的键盘快捷键,添加带<param ...>标记的新行?

更新:此功能在官方称为"智能注释编辑",其完整文档可在" XML文档注释 "(分隔符)下的"MSDN编程人员指南"中找到.没有提到任何"更新"功能,所以这个问题的答案显然是"不".

c# keyboard-shortcuts visual-studio-2012

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

SQL Server Management Studio中的单元测试

有没有办法在SSMS中为SQL查询创建简单的单元测试?我是T-SQL和SSMS的新手,但如果可能的话,我想尝试将一些旧的TDD习惯带入这个领域.

因此,例如,当我编写DDL以创建复杂函数和什么不是时,我想有一些方法来包含一个单元测试(失败时)实际上会导致输出面板在执行时显示错误消息.(这与在正常编程环境中"破坏构建"类似.)

目前,当我编写一个语法正确的函数,然后按F5执行它,输出消息是:

Command(s) completed successfully.
Run Code Online (Sandbox Code Playgroud)

我正在寻找的是一些简单的SQL技巧来模拟基本的红灯/绿灯测试用例.所以我会编写一系列测试语句,只有当我的用户定义函数按预期运行时才会通过.否则将显示错误消息,例如:

Msg 207, Level 16, State 1, Line 2
Invalid statement.
Run Code Online (Sandbox Code Playgroud)

这将允许我立即跳到失败的测试,看看我做错了什么.

我不希望有任何"内置"的东西,但有什么方法可以"假装"吗?

更新:我刚刚了解到你可以在SS2012中抛出异常,我确信我可以将其用于此目的,但不幸的是我现在仍然坚持使用SS2008.在SS2008中有什么可比性的吗?

unit-testing ssms sql-server-2008

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

.NET图表上的点集合是否有上限?

我是.NET System.Windows.Forms.DataVisualization.Charting库中的图表功能的新手.在我的探索原型制作过程中,我创建了一个图表,我可以添加随机点,更改图表类型等.但我注意到每次我向图表添加超过34998个点(无论我使用哪种类型的图表类型) ,整个图表消失,并被一个大'X'取代.没有抛出异常,它似乎不是点集合本身的限制.(如果我在添加第34999个点时单步执行代码,它会被添加到集合中;但是一旦图表重新绘制,它会立即被替换为X).

我意识到这首先在图表上有很多要点,我打算看一些抽取技术来对输入数据进行下采样.但我只是想知道这个数字是否存在硬限制,系统中的哪个模块是实际约束(数据集,绘图画布等).我在文档中找不到任何提及它.有谁知道这样的限制?

.net c# charts

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

编辑/修改C#应用程序设置

.NET配置设置功能不像我想的那么灵活.如果我正确理解应用程序设置,我可以更改/编辑设置时受到限制.在C#中,应用程序设置分为两种不同的类型或范围("应用程序"和"用户"),但两者在如何更改或修改它们方面都有局限性.下表显示了不同之处:

   SCOPE:   |  EDIT AT DESIGN-TIME: |     EDIT AT RUN-TIME:     |  EDIT BETWEEN SESSIONS:
---------------------------------------------------------------------------------------
   User     |   Setings.settings    |  Settings.Default.Save()  |     *Not supported*       
Application |   Setings.settings    |      *Not supported*      |  edit  app.exe.config   

是否有任何"内置"设置功能允许我通过所有三种机制编辑设置?使用配置文件的主要动机之一是允许用户更改默认值而无需重新构建源代码(可以使用应用程序作用域设置完成).但是,不应强制用户编辑.config文件; 他们还应该能够在运行时进行跨设置的更改(可以使用用户范围设置完成).当然必须有某种机制提供两种功能.

BOTTOM LINE:为什么不能app.exe.config在运行时编辑应用程序设置()?这将解决我所有的问题.我知道这可能会导致共享同一台计算机的用户出现问题.但是谁又这样做了?

可能的解决方法:是否有将用户设置配置文件的默认存储位置更改为非隐藏文件夹?


UPDATE(澄清): 我想说的是,我希望能够在更改默认设置设计时,在运行时, 在两者之间的会议(即通过编辑配置文件).但是当使用内置的C#持久性机制时Settings.settings,我必须选择最多2个中的3个.我错过了什么?还有其他我不知道的选择吗?

[ 用例:我想为连接字符串存储"默认"数据库名称,但我希望用户能够在运行时指定不同的数据库(从而成为该用户的"新"默认值).但我还希望能够覆盖配置文件中的默认值,而无需重新运行或重新构建应用程序.

[ 更好的用例:(回复评论)

我有一个配置文件的计算模型,其中包含模型中参数的默认值.用户A启动模型并决定更改多个参数的值.对于该用户的所有未来会话(即,在RunTime编辑),该更改需要持续存在.随后,该用户希望与他的团队共享该修改的配置文件(例如,通过版本控制存储库或电子邮件).这将允许用户B更新其默认参数值(以匹配用户A),而无需在应用程序中手动更改它们(即,在会话之间编辑).所有这些mod都应该在Design-Time之后发生. …

c# application-settings settings.settings

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

在 Visual Studio 中使用 VSCode 扩展

今天我发现了一个VSCode 扩展,我非常喜欢在 Visual Studio 2017(专业版或企业版)中使用它。我对 VSCode 一点也不熟悉。平台是否完全不同,或者是否希望我能以某种方式修改扩展并“移植它”?

visual-studio-code vscode-extensions visual-studio-2017

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

DataContext和BindingContext之间有什么区别

我一直在研究许多不同的WPF/MVVM资源中的数据绑定技术.我以为我对DataContext对象的目的和用途有相当的把握.但后来我在MVVM上看到了这篇文章(这是一个在这里引用的.pdf ).整个章节没有提到DataContext一次,而是在各种内容控件上使用"BindingContext"对象.我以前从未听说BindingContext过; 它是独一无二的Xamarin形式或什么?它是为控件设置DataContext的替代但等效的方法吗?

更新:

虽然我在下面已经回答了这方面的问题,但事实证明,我并不是唯一一个因这些差异而感到困惑的人.显然,Xamarin.Forms开发背后的历史导致Windows XAML存在许多差异.我很高兴得知已经公布了标准化这两条路径的正式努力,并将包括DataContext术语.

c# wpf mvvm

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