小编Ale*_*lex的帖子

用于失败单元测试的Visual Studio 2013测试资源管理器StackTrace显示"无可用源"而不是到失败行的链接

我在C#项目中创建了一个简单的单元测试:

[TestMethod]
public void DoSomething()
{
    // Act

    // assert
    Assert.Fail("blah");
}
Run Code Online (Sandbox Code Playgroud)

当我运行它时,测试资源管理器不会超链接到失败的行(Assert)并且不显示行号.相反,如果我将鼠标悬停在该线上,则显示"没有可用的来源".

Test Name:  DoSomething
Test FullName:  BlahBlah.DoSomething
Test Source:c:\Src\BlahBlahTest.cs : line 223
Test Outcome:   Failed
Test Duration:  0:00:04.1933182

Result Message: Assert.Fail failed. blah
Result StackTrace:  at BlahBlahTest.DoSomething()
Run Code Online (Sandbox Code Playgroud)

我删除了.suo文件,测试设置为完全调试.我也安装了Resharper,它的测试运行器也没有链接到故障线路.

有人知道如何解决这个问题吗?

c# unit-testing visual-studio-2013

7
推荐指数
0
解决办法
471
查看次数

SignInManager.ExternalSignInAsync在注册后始终返回SignInStatus.Failure

在我的混合MVC和WebAPI应用程序中,用于通过Google和Facebook进行身份验证的ExternalLoginCallback包含

var result = await SignInManager.ExternalSignInAsync(loginInfo, isPersistent: false);
Run Code Online (Sandbox Code Playgroud)

即使在注册Google和Facebook之后,它总是SignInStatus.Failure

这是我的ExternalLoginCallback(默认值)

[AllowAnonymous]
public async Task<ActionResult> ExternalLoginCallback(string returnUrl)
{
    var loginInfo = await AuthenticationManager.GetExternalLoginInfoAsync();
    if (loginInfo == null)
    {
        return RedirectToAction("Login");
    }

    // Sign in the user with this external login provider if the user already has a login
    var result = await SignInManager.ExternalSignInAsync(loginInfo, isPersistent: false);
    switch (result)
    {
        case SignInStatus.Success:
            if (returnUrl == null)
            {
                using (var context = ApplicationDbContext.Create())
                {
                    var user = context.Users.FirstOrDefault(x => x.Email.Equals(loginInfo.Email));
                    return RedirectToAction("Dashboard", "Provider");
                } …
Run Code Online (Sandbox Code Playgroud)

c# asp.net-mvc asp.net-mvc-4 asp.net-identity asp.net-web-api2

7
推荐指数
0
解决办法
888
查看次数

当令牌过期(而不是无效)时,如何让OAuthAuthorizationServerProvider返回特定的错误代码或响应?

我为我的MVC WebAPI项目设置了常规的OWIN OAuth设置 - 来自前端开发人员的一个请求是能够确定令牌是否因为过期而被拒绝,或者它只是一个无效的令牌.

据我所知,默认情况下,OAuthAuthorizationServerProvider位于中间,并且神奇地拦截查看承载令牌的Authorization标头的请求,并确定是否已对此请求授权或发送401/Authorization.

是否可以自定义此行为/是否有任何其他方法来确定授权被拒绝的原因

我可以看到存在以下方法:

public virtual Task ValidateAuthorizeRequest(OAuthValidateAuthorizeRequestContext context);
Run Code Online (Sandbox Code Playgroud)

但是我不确定默认的实现是什么,看起来是什么,或者这是否是我应该去定制提供程序以实现我所追求的目标.

我在Startup.cs中的OAuthOptions:

OAuthOptions = new OAuthAuthorizationServerOptions
{
    TokenEndpointPath = new PathString("/Token"),
    Provider = new ApplicationOAuthProvider(PublicClientId, UserManagerFactory),
    AuthorizeEndpointPath = new PathString("/api/Account/ExternalLogin"),
    AccessTokenExpireTimeSpan = TimeSpan.FromMinutes(60),
    AllowInsecureHttp = true
};
Run Code Online (Sandbox Code Playgroud)

c# asp.net-mvc oauth owin

6
推荐指数
0
解决办法
2129
查看次数

"Sprache"monadic解析器`Or`和`Many`语义

我正在使用Sprache monadic解析器来解析DSL.

这是我的语法片段:

public static readonly Parser<IExpression> TerminatedStatement =
    from exp in Parse.Ref(() => Expression)
    from _ in Parse.Char(';').Token()
    select exp;

public static readonly Parser<IExpression> Statement =
    Parse.Ref(() => TerminatedStatement)
    .Or(Parse.Ref(() => InvocationStatement));

public static readonly Parser<Statements> Statements =
    from statements in Statement.Many()
    select new Statements(statements);
Run Code Online (Sandbox Code Playgroud)

如果我然后使用它,Statements.Parse(" ")我得到一个例外,说输入意外结束.

如何Statements使用Many运算符,AFAIK产生0-n结果.

" "应该返回一个Statements包含0个语句的实例.

那么解析器如何抱怨意外结束输入呢?难道它只是得出结论,那里没有陈述?(不管构成语句的不同表达方式有什么时髦的东西)

c# sprache

6
推荐指数
0
解决办法
986
查看次数

对于实体框架,全局禁用对表的级联删除

寻找Entity Framework级联删除的一些帮助.我们最初有全局级联删除禁用

modelBuilder.Conventions.Remove<ManyToManyCascadeDeleteConvention>();
modelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>();
Run Code Online (Sandbox Code Playgroud)

我们现在想要重新启用它.但问题是,在创建迁移时,我们得到此错误"可能导致循环或多个级联路径".

使用流畅的API工作的解决方案创建..

modelBuilder.Entity<Campus>()
            .HasRequired(c => c.Institution)
            .WithMany()
            .WillCascadeOnDelete(false);
Run Code Online (Sandbox Code Playgroud)

然而,由于InstitutionId无处不在,机构会导致多个问题.我想避免不得不通过每个选项并逐个忽略它们.是否可以停止对Institution表中所有关系的级联删除?

机构永远不会被删除,所以我们不介意是否没有级联删除.

谢谢

c# entity-framework cascading-deletes

6
推荐指数
0
解决办法
1698
查看次数

实体框架存储XML数据类型; "无法切换编码"错误

我在使用.NET Framework 4.5的C#项目中使用Entity Framework 6.0.0版.我有一个Filing具有SQL Server列的类,该列XmlContentxml数据类型.我有数据库优先实体框架我主要用于保存Filing表中(我目前不读回那些行,如果这有所不同)

我已经阅读了这些关于使用Entity Framework保存到XML列的"字符串"支持属性的帖子,如此此处所述

我的XML声明看起来像这样

<?xml version="1.0" encoding="UTF-8"?>
....
Run Code Online (Sandbox Code Playgroud)

我的实体框架自动生成(数据库优先)如下所示:

public partial class Filing
{
    // ...
    public string XmlContent { get; set; }
    // ...
}
Run Code Online (Sandbox Code Playgroud)

使用我的自定义分部类(保存到字符串属性...):

public partial class Filing
{
    [NotMapped]
    public XmlDocument XmlDocument
    {
        get
        {
            var xmlDocument = new XmlDocument();
            xmlDocument.LoadXml(this.XmlContent);
            return xmlDocument;

        }
        set
        {
            this.XmlContent = value.OuterXml;
        }
    }
    // ...
} …
Run Code Online (Sandbox Code Playgroud)

c# xml entity-framework

6
推荐指数
0
解决办法
1643
查看次数

功能与自定义委托的性能

我正在研究一些对性能至关重要的代码,并且发现使用委托调用匿名方法比通过Func委托调用相同的代码更糟糕。

public class DelegateTests
{
    public delegate int GetValueDelegate(string test);

    private Func<string, int> getValueFunc;

    private GetValueDelegate getValueDelegate;

    public DelegateTests()
    {
        getValueDelegate = (s) => 42;
        getValueFunc = (s) => 42;                        
    }

    [Benchmark]
    public int CallWithDelegate()
    {
        return getValueDelegate.Invoke("TEST");
    }

    [Benchmark]
    public int CallWithFunc()
    {
        return getValueFunc.Invoke("TEST");
    }
}
Run Code Online (Sandbox Code Playgroud)

BenchmarkDotNet 给出:

// * Summary *

BenchmarkDotNet=v0.10.4, OS=Windows 10.0.14393
Processor=Intel Core i7-4770HQ CPU 2.20GHz (Haswell), ProcessorCount=2
Frequency=10000000 Hz, Resolution=100.0000 ns, Timer=UNKNOWN
  [Host]    : Clr 4.0.30319.42000, 32bit LegacyJIT-v4.6.1637.0
  RyuJitX64 : Clr 4.0.30319.42000, 64bit …
Run Code Online (Sandbox Code Playgroud)

c# performance jit

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

Visual Studio输出窗口中的消息源

假设我的输出窗口中有一条消息(显示Debug的输出)

抛出异常:mscorlib.dll中的"System.InvalidOperationException"

我的应用程序不会抛出异常,只显示该消息并继续.当我在导入的DLL中调用方法时发生异常,这是一个C++模块(我的应用程序是C#).尽管出现此消息,该方法仍然可以正常运行.

我的猜测是该模块正在处理异常,然后显示该消息,但我想确定是这种情况,并且我没有做任何事情来导入它或编组数据(或自定义编组).

(我的代码:

[DllImport("theExternalModule.dll", EntryPoint = "ReadData", SetLastError = true)]
[return: MarshalAs(UnmanagedType.U4)]
private static extern UInt32 ReadData([MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(JaggedArrayMarshaler))] Int16[][] data,
                                      [MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(JaggedArrayMarshaler))] Int16[][] dataOrig,
                                      [MarshalAs(UnmanagedType.U2)] Int16 buffsize,
                                      ref int smpNum);
Run Code Online (Sandbox Code Playgroud)

resultCode = ReadData(_buffer, _origBuffer, bufferSize, ref sampleNumber);
Run Code Online (Sandbox Code Playgroud)

(当我在调试器中单步执行此行时,将显示该消息)

我的问题是,有没有办法让输出窗口告诉我哪个模块或方法导致显示该消息?

c# c++ debugging visual-studio visual-studio-2017

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

如何在电报上检测已编辑或已删除的消息

我试图通过c#中的TLSharp库在电报上的订阅频道上检测编辑或删除的消息.

1- while(true)循环我得到最新的更新.

2-当我删除或编辑测试消息时,我只收到TLUpdateChannelTooLong.

3-然后我使用client.GetHistoryAsync函数来获取频道消息,并检查他们的EditDate.

但是我不知道我应该在历史中深入了解多少,而且我很难用这段代码找到已删除的消息.

有没有解决方案可以轻松安全地找到已删除/已编辑的邮件?

我的部分代码:

state = await client.SendRequestAsync<TLState>(new TLRequestGetState());
while (true)
{
    await Task.Delay(1000);
    var req = new TLRequestGetDifference() { Date = state.Date, Pts = state.Pts, Qts = state.Qts };
    TLDifference diff = null;
    try
    {
        diff = await client.SendRequestAsync<TLAbsDifference>(req) as TLDifference;
    }
    catch (Exception ex)
    {
        HandleThisException(ex);
    }
    //--
    if (diff != null)
    {
        state = await client.SendRequestAsync<TLState>(new TLRequestGetState());
        foreach (var upd in diff.OtherUpdates.OfType<TLUpdateNewChannelMessage>())
        {
            var tm = (upd.Message as TLMessage);
            if …
Run Code Online (Sandbox Code Playgroud)

c# telegram

6
推荐指数
0
解决办法
821
查看次数

一起编写ModbusClient和ModbusServer时出现问题

关于守则

EasyModbus Nuget在C#窗口表单应用程序中使用。我正在尝试使用RTU(实时更新)来获取更改的保持寄存器的地址值ModbusServer

下面的代码连接到服务器。

void Connect() {
    ModbusClient client = null;
    client = new ModbusClient("IP Address", 502);
    client.Connect();
}
Run Code Online (Sandbox Code Playgroud)

下面的代码获取保持寄存器下面给出的地址值。

client.ReadHoldingRegisters(10001, 1);
Run Code Online (Sandbox Code Playgroud)

到目前为止,一切正常。

我正在阅读有关在EasyModbus中阅读实时更新的信息。我发现此链接可以将保持寄存器的更改后的值自动发送到偶数处理程序。

现在,我有以下代码:

void Connect() {
    ModbusServer ser = new ModbusServer();
    ser.Port = Convert.ToInt32(Settings.Default.Port);
    ser.Listen();
    ser.HoldingRegistersChanged += Ser_HoldingRegistersChanged;

    ModbusClient client = null;
    client = new ModbusClient("IP Address", 502);
    client.Connect();
}


private void Ser_HoldingRegistersChanged(int register, int numberOfRegisters)
{
}
Run Code Online (Sandbox Code Playgroud)

运行它时,出现以下错误。

通常,每个套接字地址(协议/网络地址/端口)只能使用一种

发生此错误是因为我添加了ModbusServer代码。

您能否说明为什么会这样?

c# modbus-tcp easy-modbus

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