小编Cod*_*ike的帖子

当你的实现是一个空方法时,你如何"正确"实现Dispose()(根据FxCop)?(CA1063)

我有一个接口的实现,并且该接口扩展IDisposable.在我特定的接口实现中,我不需要处理任何东西,所以我只有一个空Dispose()方法.

public interface IMyStuff : IDisposable
{
}

public MyStuffImpl : IMyStuff
{
    public void Dispose()
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

现在在FxCop中,这导致CA1063:

Error, Certainty 95, for ImplementIDisposableCorrectly
{
    Resolution   : "Provide an overridable implementation of Dispose(
                   bool) on 'MyStuffImpl' or mark the type as sealed. 
                   A call to Dispose(false) should only clean up native 
                   resources. A call to Dispose(true) should clean up 
                   both managed and native resources."
}
CriticalWarning, Certainty 75, for CallGCSuppressFinalizeCorrectly
{
    Resolution   : "Change 'MyStuffImpl.Dispose()' …
Run Code Online (Sandbox Code Playgroud)

.net c# fxcop idisposable

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

如何测试使用BackgroundWorker加载的ViewModel?

MVVM的一个好处是ViewModel的可测试性.在我的特定情况下,我有一个VM,它在调用命令时加载一些数据,以及相应的测试:

public class MyViewModel
{
    public DelegateCommand LoadDataCommand { get; set; }

    private List<Data> myData;
    public List<Data> MyData
    {
        get { return myData; }
        set { myData = value; RaisePropertyChanged(() => MyData); }
    }

    public MyViewModel()
    {
        LoadDataCommand = new DelegateCommand(OnLoadData);
    }

    private void OnLoadData()
    {
        // loads data over wcf or db or whatever. doesn't matter from where...
        MyData = wcfClient.LoadData();
    }
}

[TestMethod]
public void LoadDataTest()
{
    var vm = new MyViewModel();
    vm.LoadDataCommand.Execute();
    Assert.IsNotNull(vm.MyData);
}
Run Code Online (Sandbox Code Playgroud)

所以这一切都很简单.但是,我真正想做的是使用a加载数据BackgroundWorker,并在屏幕上显示"加载"消息.所以我将VM更改为: …

c# wpf unit-testing mvvm backgroundworker

13
推荐指数
1
解决办法
2612
查看次数

使用.NET 4.5连接到SQL Server Azure时发生握手异常

所以我打开了一些在大约2个月内没有被触及过的代码.

上次我打开应用程序时,所有单元测试都通过了.现在没有代码更改,我的所有数据单元测试都失败,并出现以下错误:

初始化方法PerTrac.Pictor.Data.Test.RequestLogRepositoryShould.CreateLog抛出异常.System.Data.EntityException:System.Data.EntityException:基础提供程序在Open上失败.---> System.Data.SqlClient.SqlException:与服务器成功建立连接,但在登录前握手期间发生错误.(提供者:SSL提供者,错误:0 - 等待操作超时.)---> System.ComponentModel.Win32Exception:等待操作超时.

我意识到存在类似的问题,但这些解决方案对我的情况没有任何影响.

有没有人经历过实体框架和SQL Azure的这个错误?

我应该注意到,我可以从SSMS连接,使用相同的凭据没有问题.我没有在禁用的协议上设置强制加密,我已经多次重置本地IIS.

.net sql-server entity-framework azure azure-sql-database

13
推荐指数
2
解决办法
6万
查看次数

.NET属性:为什么GetCustomAttributes()每次都会创建一个新的属性实例?

所以我在.NET中使用属性玩了一些,并意识到每次调用Type.GetCustomAttributes()都会创建一个属性的新实例.这是为什么?我认为属性实例基本上是一个single-each-MemberInfo,1个实例绑定到Type,PropertyInfo等...

这是我的测试代码:

using System;

namespace AttribTest
{
[AttributeUsage(AttributeTargets.Class)]
class MyAttribAttribute : Attribute
{
    public string Value { get; set; }

    public MyAttribAttribute()
        : base()
    {
        Console.WriteLine("Created MyAttrib instance");
    }
}

[MyAttrib(Value = "SetOnClass")]
class MyClass
{
}

class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("Getting attributes for MyClass.");
        object[] a = typeof(MyClass).GetCustomAttributes(false);
        ((MyAttribAttribute)a[0]).Value = "a1";

        Console.WriteLine("Getting attributes for MyClass.");
        a = typeof(MyClass).GetCustomAttributes(false);
        Console.WriteLine(((MyAttribAttribute)a[0]).Value);

        Console.ReadKey();
    }
}
}
Run Code Online (Sandbox Code Playgroud)

现在,如果要实现属性,我希望输出为:

Created MyAttrib instance
Getting attributes for MyClass.
Getting attributes …
Run Code Online (Sandbox Code Playgroud)

.net performance attributes

11
推荐指数
2
解决办法
5784
查看次数

C#:在两个名称空间相似时尝试解析类时出现问题

我遇到了一个问题,我无法在不同的命名空间中引用类.我有2个班:

namespace Foo
{
    public class Class1 { ... }
}

namespace My.App.Foo
{
    public class Class2
    {
        public void SomeMethod()
        {
            var x = new Foo.Class1; // compile error!
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

编译错误是:

命名空间"My.App.Foo"中不存在类型或命名空间名称"Class1"

在这种情况下,我似乎无法让Visual Studio认识到"Foo.Class1"指的是第一类.如果我将鼠标悬停在"Foo"上,则表明它试图将其解析为"My.App.Foo.Class1"

如果我把线:

using Foo;
Run Code Online (Sandbox Code Playgroud)

在包含Class2的.cs文件的顶部,然后它也将其解析为"My.App.Foo".

有没有一些技巧来引用正确的"Foo"命名空间而不只是重命名命名空间,以便它们不冲突?这两个命名空间都在同一个程序集中.

c# namespaces

11
推荐指数
1
解决办法
4678
查看次数

如何隐藏Kdiff3中的匹配行

有没有人知道在Kdiff3中隐藏匹配行的方法(在Windows中).我真的只关心这些差异,而宁愿快速浏览差异列表,而不是所有的填充(即匹配线).

我对其他软件选项持开放态度,但我发现很难相信Kdiff3没有这个功能.

diff kdiff3

11
推荐指数
0
解决办法
623
查看次数

Linq和Equality Operator:类型'System.Int32'的表达式不能用于'System.Object'类型的参数

我正在尝试覆盖C#中的相等(==)运算符来处理将任何类型与自定义类型进行比较(自定义类型实际上是null周围的包装器/框).

所以我有这个:

internal sealed class Nothing
{
    public override bool Equals(object obj)
    {
        if (obj == null || obj is Nothing)
            return true;
        else
            return false;
    }

    public static bool operator ==(object x, Nothing y)
    {
        if ((x == null || x is Nothing) && (y == null || y is Nothing))
            return true;
        return false;
    }
   ...
}
Run Code Online (Sandbox Code Playgroud)

现在,如果我打电话:

Nothing n = new Nothing();
bool equal = (10 == n);
Run Code Online (Sandbox Code Playgroud)

它工作得很好.但是,如果我尝试通过Linq表达式树执行相同的操作:

exp = Expression.Equal(
    Expression.Constant(10), 
    Expression.Constant(new Nothing(), typeof(Nothing))
); …
Run Code Online (Sandbox Code Playgroud)

.net c# linq operator-overloading

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

Oracle:有没有办法获取视图的列数据类型?

对于oracle中的表,我可以查询"all_tab_columns"并获取表列信息,如数据类型,精度,列是否可为空.

在SQL Developer或TOAD中,您可以单击GUI中的视图,它将吐出视图返回的列的列表以及相同的数据集(数据类型,精度,可空等).

所以我的问题是,有没有办法查询视图的这个列定义,你可以为表格的方式?GUI工具如何做到这一点?

oracle

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

MVC4 - 有没有办法将根路由到"正常"未处理的html页面?

我有一个MVC4应用程序,但我主要用于WebAPI部分.我希望将一个"普通的旧HTML"文件发送回用户(然后使用KnockoutJS或KendoUI从webapi控制器中提取JSON).

我知道我可以这样做:

routes.IgnoreRoute("{page}.html");
Run Code Online (Sandbox Code Playgroud)

然后,如果我浏览到"localhost/index.html",它会成功返回我的.html页面.但是,我真的想映射"root"默认路径"localhost /"以返回我的index.html.

我试过这个:

routes.MapPageRoute("root", "", "~/index.html");
Run Code Online (Sandbox Code Playgroud)

但是这会引发错误:

没有为扩展名".html"注册的构建提供程序.您可以在machine.config或web.config中的<compilation> <buildProviders>部分注册一个.确保具有BuildProviderAppliesToAttribute属性,该属性包含值"Web"或"全部".

任何人对如何使这项工作有任何想法?我可以点击一个返回普通html页面的默认控制器,但是对于HTML页面来说,遍历整个ASP.NET堆栈似乎有些过分,然后只需调用WebAPI URL以返回ASP.NET堆栈获取页面模型的一些JSON数据.

我基本上只是想"跳过"所有MVC管道并让IIS将我发回html页面,好像它不是ASP.NET应用程序,或者至少做尽可能少的处理.

.net asp.net routes asp.net-mvc-4 knockout.js

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

Unity框架DependencyAttribute仅适用于公共属性?

我试图在我的代码中清理一些可访问性的东西,并无意中破坏了Unity依赖注入.过了一会儿,我意识到我标记了一些我不想在我的DLL之外暴露到内部的公共属性.然后我开始得到例外.

因此,似乎在Unity中使用[Dependency]属性仅适用于公共属性.我认为这是有道理的,因为内部和私人道具对于Unity程序集是不可见的,但是除了Unity之外,拥有一堆你永远不希望任何人设置或能够设置的公共属性感觉真的很脏.

有没有办法让团结也设置内部或私人财产?

这是我希望通过的单元测试.目前只有公共道具测试通过:

    [TestFixture]
public class UnityFixture
{
    [Test]
    public void UnityCanSetPublicDependency()
    {
        UnityContainer container = new UnityContainer();
        container.RegisterType<HasPublicDep, HasPublicDep>();
        container.RegisterType<TheDep, TheDep>();

        var i = container.Resolve<HasPublicDep>();
        Assert.IsNotNull(i);
        Assert.IsNotNull(i.dep);
    }

    [Test]
    public void UnityCanSetInternalDependency()
    {
        UnityContainer container = new UnityContainer();
        container.RegisterType<HasInternalDep, HasInternalDep>();
        container.RegisterType<TheDep, TheDep>();

        var i = container.Resolve<HasInternalDep>();
        Assert.IsNotNull(i);
        Assert.IsNotNull(i.dep);
    }

    [Test]
    public void UnityCanSetPrivateDependency()
    {
        UnityContainer container = new UnityContainer();
        container.RegisterType<HasPrivateDep, HasPrivateDep>();
        container.RegisterType<TheDep, TheDep>();

        var i = container.Resolve<HasPrivateDep>();
        Assert.IsNotNull(i);
        Assert.IsNotNull(i.depExposed);
    }
}

public class HasPublicDep …
Run Code Online (Sandbox Code Playgroud)

.net unity-container

9
推荐指数
4
解决办法
9969
查看次数