小编Age*_*ire的帖子

为什么没有捕获的lambda从C#5中的静态变为C#6中的实例方法?

此代码在标记的行上引发异常:

using System;
using System.Linq.Expressions;

namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {
            Action<int, int> a = (x, y) => Console.WriteLine(x + y);

            ParameterExpression p1 = Expression.Parameter(typeof(int), "p1");
            ParameterExpression p2 = Expression.Parameter(typeof(int), "p2");

            // Here is the exception ArgumentNullException.
            MethodCallExpression call = Expression.Call(a.Method, p1, p2);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,我已经在VS2013(就像魅力)和VS2015社区(抛出异常)中测试了这段代码.

我跟着.Net参考源,这导致我有一些代码条件,检查是否提供了方法IsStatic.

在我的例子中,我传递的方法(a.Method)在VS2013中是静态的,并且由于某种原因在VS2015中是非静态的(实例).如果没有,它会抛出,告诉我我没有提供Instance论据.

为什么会这样?如何避免这种情况,以便Expression.Call在新的Visual Studio中重新开始工作?

c# visual-studio-2013 c#-6.0 visual-studio-2015

31
推荐指数
2
解决办法
1871
查看次数

如何支持NTLM身份验证与ASP.NET MVC中的回退形式?

如何在ASP.NET MVC应用程序中实现以下内容:

  1. 用户打开内联网网站
  2. 如果可能,用户将进行静默身份验证
  3. 如果NTLM身份验证没有成功,请向用户显示登录表单
  4. 用户指示登录密码并从预定义域列表中选择域
  5. 用户使用AD在代码中进行身份验证

我知道如何实现4和5,但无法找到有关如何组合NTLM和表单的信息.因此,永远不会显示NTLM本机登录/密码对话框 - 透明身份验证或外观漂亮的登录页面.

该怎么办?是否应该询问用户登录名和密码?可以使用她当前的凭据(域用户名)而无需输入登录名和密码吗?

更新这些,调查相同的问题:

当我问这个时,我并不完全理解NTLM身份验证如何在内部工作.这里需要了解的重要一点是,如果用户的浏览器不能正确支持NTLM,或者用户禁用了NTLM支持,那么服务器永远不会有机会解决这个问题.

Windows身份验证的工作原理:

  1. 客户端向服务器发送常规HTTP请求
  2. 服务器以HTTP状态401响应并指示必须使用NTLM身份验证来访问资源
  3. 客户端发送NTLM Type1消息
  4. 服务器使用挑战响应NTLM Type2消息
  5. 客户端发送Type3消息以响应challenge
  6. 服务器响应请求的实际内容

如您所见,不支持NTLM的浏览器不会转到步骤(3),而是会向用户显示IIS生成的错误401页面.

如果用户没有凭据,则在取消NTLM身份验证后,弹出对话框窗口浏览器也不会继续(3).

因此,我们没有机会自动将用户重定向到自定义登录页面.

这里唯一的选择是有一个"网关"页面,我们决定用户是否应该支持NTLM,如果是,请重定向到受NTLM保护的主页.

如果没有,请显示登录表单并通过手动输入登录名和密码进行身份验证.

通常通过匹配IP范围或通过检查预定义IP表来基于用户的IP地址和/或主机名做出决定.

c# authentication asp.net-mvc ntlm

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

如何在Visual Studio 2010中关闭远程调试?

我在VS2010中用WPF + C#编写了项目,当我通过按F5启动它(但不是Ctrl-F5,这是正常的),程序本身开始滞后,任务管理器显示在高优先级msvsmon.exe消耗几乎所有CPU.但是当我按下按钮,键入文本框等时会发生这种情况.

那么如何关闭呢?

c# wpf remote-debugging visual-studio

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

扩展空检查的最佳方法是什么?

你们都这样做了:

public void Proc(object parameter)
{
    if (parameter == null)
        throw new ArgumentNullException("parameter");

    // Main code.
}
Run Code Online (Sandbox Code Playgroud)

Jon Skeet曾经提到他有时会使用扩展来进行检查,所以你可以这样做:

parameter.ThrowIfNull("parameter");
Run Code Online (Sandbox Code Playgroud)

所以我得到了这个扩展的两个实现,我不知道哪个是最好的.

第一:

internal static void ThrowIfNull<T>(this T o, string paramName) where T : class
{
    if (o == null)
        throw new ArgumentNullException(paramName);
}
Run Code Online (Sandbox Code Playgroud)

第二:

internal static void ThrowIfNull(this object o, string paramName)
{
    if (o == null)
        throw new ArgumentNullException(paramName);
}
Run Code Online (Sandbox Code Playgroud)

你怎么看?

c# null extension-methods isnull

16
推荐指数
3
解决办法
4702
查看次数

不再需要BitmapImage后如何释放内存?

首先,我BitmapImageImage控件上加载一个Window.其次,我使用Image控件然后关闭Window.

我在一分钟内做了2-3次,而且我的记忆很快就会填满,因为当窗户关闭时,图像不会卸回.

那么如何手动BitmapImageImage.Source控制中卸载以释放内存?

memory wpf image bitmapimage

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

我可以用这种方式为所有派生的单身人士定义一个抽象类吗?

这是我的抽象类,每次我想创建一个Singleton时都必须派生它:

public abstract class Singleton<T> where T : Singleton<T>
{
    private static readonly Lazy<T> _instance = new Lazy<T>(() =>
    {
        var constructor = typeof(T).GetConstructor(BindingFlags.NonPublic |
            BindingFlags.Instance, null, new Type[0], null);

        return (T)constructor.Invoke(null);
    });
    public static T Instance { get { return _instance.Value; } }
    public Singleton() { }
}
Run Code Online (Sandbox Code Playgroud)

所以,每次我需要遵循Singleton设计模式时,我都可以这样做:

sealed class Server : Singleton<Server>
{
    private Server() { }
    ...
}
Run Code Online (Sandbox Code Playgroud)

这是完全正确的,如果没有,为什么?

编辑:

  • 在派生类示例上添加了私有构造函数并在抽象基础上调用.

编辑:

  • 重写类型参数初始化.

.net c# singleton abstract-class c#-4.0

12
推荐指数
2
解决办法
2259
查看次数

使用Linq to Sql自动序列化

有没有办法在表格中存储数据:

http://pasteboard.s3.amazonaws.com/images/LDTcQpG.png

内部SettingsModel列,其定义Linq-to-Sql如下:

http://pasteboard.s3.amazonaws.com/images/LDXSPiM.png

并且DataContext选项转向:

http://pasteboard.s3.amazonaws.com/images/LE1ddhn.png

使用类SettingsModel定义如下:

namespace ElQueue.DataClasses
{
    [DataContract]
    public sealed class SettingsModel
    {
        [DataMember(IsRequired = true)]
        public int[] VideoMediaData { get; set; }
    }
}
Run Code Online (Sandbox Code Playgroud)

这条路?...

using (SomeDataContext dataContext = new SomeDataContext())
{
    SettingsModel m = new SettingsModel();
    m.VideoMediaData = new int[] { 1, 2, 3 };
    dataContext.MainTableSettings.InsertOnSubmit(new MainTableSetting() { SettingsModel = m });
    dataContext.SubmitChanges();
}

using (SomeDataContext dataContext = new SomeDataContext())
{
    var r = dataContext.MainTableSettings.Single();
}
Run Code Online (Sandbox Code Playgroud)

你看,上面的代码没有正常工作,它抛出异常,说它无法将字符串转换为MainTableSetting意味着它无法保存所有序列化数据或者加号无法反序列化它. …

c# serialization xml-serialization linq-to-sql

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

如何在.net的MVC中创建安全的每Web请求事务?

我需要在它处理的每个Web请求中成为我的整个应用程序事务.

我需要启动事务,如果控制器中没有异常,则提交它.否则,回滚.

到目前为止,我有以下实现:

  • 首先,我在控制器上创建事务作为依赖.
  • 然后,我做我的控制器/服务/存储库/其他工作.
  • 最后,主抽象控制器类执行其OnActionExecuted方法,我提交它或不提交它.

以下是我使用的技术列表:

  • MVC 4
  • Ninject
  • Automapper
  • 服务模式

现在,我想知道的是死锁怎么样?当两个Web请求同时处理时会发生什么,此外它们将获得使用两个存储库(与其DataContext实例链接)的权利,这意味着数据库中有两个表

例如:一个请求最初想要读取表Table1,然后Table2,另一个请求想要使用Table2然后使用Table1.

我该怎么办?

asp.net-mvc transactions transactionscope httpwebrequest asp.net-mvc-4

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

如何生成绝对独特的GUID?

有没有办法在每次100%新GUID时生成而没有任何机会在整个应用程序中发生冲突?

由于我无法在八小时内回答我的问题,我想出了解决方案:

internal static class GuidGenerator
{
    private static readonly HashSet<Guid> _guids = new HashSet<Guid>();

    internal static Guid GetOne()
    {
        Guid result;

        lock (_guids)
            while (!_guids.Add(result = Guid.NewGuid())) ;

        return result;
    }
    internal static void Utilize(Guid guid)
    {
        lock (_guids)
            _guids.Remove(guid);
    }
}
Run Code Online (Sandbox Code Playgroud)

此代码是否解决了应用程序中的问题?

编辑:呃,它变得复杂了.线程安全性会降低速度.

c#

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

缺少 Microsoft.Data.Tools.Schema.Sql.UnitTesting。再次

该错误很旧,但 MS 到目前为止还没有修复它。

我有一个 VS2015 解决方案(许多项目,主要是 ASP.NET 一个),我在 VS 2017 中打开了它。

这是我尝试构建它时看到的:

所以,我想,好吧,有些引用坏了,我进入了项目引用,删除了这两个(...Sql.UnitTesting 和 ...Tools.Components),并尝试将它们添加回来。我看到了什么?当然,这个:

版本错误,它是15.1.0.0而不是之前的15.0.0.0(对于两个 DLL)。大不了,你说,但它仍然不能编译:

它告诉我版本不匹配,我必须在 web.config 文件中创建一些程序集绑定。我做了,首先手动,然后通过双击警告,正如它所建议的那样。什么都没有改变。我仍然无法构建我的项目。

以前的 SO 问题(对 Microsoft.Data.Tools.Schema.Sql.UnitTesting 的自动引用VS2010 上的 Microsoft.VisualStudio.TestTools.UnitTesting 命名空间在哪里?)没有多大帮助,我无法删除 SSDT 组件,因为它破坏了完全加载网络项目。而我的项目不是任何类型的 SQL 测试项目。它只是一个普通的 ASP.NET 4 Web 应用程序。

我能做些什么来解决这个问题?

asp.net-mvc build-error vs-unit-testing-framework visual-studio-2017 sql-server-unit-testing

6
推荐指数
3
解决办法
9612
查看次数