小编Ant*_*ean的帖子

为什么此 dotnet 测试运行仅在 Docker 容器中崩溃?

我有这个 .NET Core 1.1 解决方案,包括一个 ASP.NET Core 项目和一个 NUnit 测试项目。每个项目都有必要的属性(如有必要,我可以显示更多)。

<PropertyGroup>
    <TargetFramework>netcoreapp1.1</TargetFramework>
    <RuntimeFrameworkVersion>1.1.1</RuntimeFrameworkVersion>
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)

我可以在本地 (Windows 10) 恢复、构建和运行测试套件,没有任何问题。

$ dotnet restore
Restoring packages for...
Restore completed in...
Generating MSBuild file...

$ dotnet build
Microsoft (R) Build Engine version 15.3.409.57025 for .NET Core
Copyright (C) Microsoft Corporation. All rights reserved.

  Example -> ...
  Test -> ...

Build succeeded.
    0 Warning(s)
    0 Error(s)

Time Elapsed ...

$ cd test/

$ dotnet test
Build started, please wait...
Build completed.

Test run for ... …
Run Code Online (Sandbox Code Playgroud)

nunit docker .net-core

5
推荐指数
0
解决办法
663
查看次数

在 ASP.NET Core 2.x 中实现 EasyNetQ 发布/订阅模式的正确方法是什么?

我很好奇在 ASP.NET Core 2.x 应用程序中实现 EasyNetQ 发布/订阅模式的正确方法。具体来说,我需要确保所有这些资源的生命周期都是正确的,并且订阅线程拥有/正常运行。

我明白这IBus应该是一个单例。

标准做法是在应用程序的生命周期内创建单个 IBus 实例。当您的应用程序关闭时将其丢弃。

https://github.com/EasyNetQ/EasyNetQ/wiki/Connecting-to-RabbitMQ

所以,看起来像这样(尽管,我应该使用各种应用程序设置文件来提供特定于环境的连接字符串......让我们假设对于这个问题来说这是可以的)。

启动.cs

public void ConfigureServices(IServiceCollection services)
{
    services.AddSingleton<IBus>(RabbitHutch.CreateBus("host=localhost"));
}
Run Code Online (Sandbox Code Playgroud)

现在,我喜欢自动订阅器功能,但何时何地运行各种订阅方法并不明显。

您可以使用它轻松扫描特定程序集以查找实现 IConsume 或 IConsumeAsync 接口的类,然后让自动订阅者将这些使用者订阅到您的总线。

直接在启动上下文中运行它似乎不太正确,对吗?

  • 订阅线程是否由正确的父线程“拥有”(是否有这样的事情)?
  • 的预期/正确生命周期是多少AutoSubscriber,Singleton甚至是必要的?
  • 我真的想注册吗AutoSubscriber?我不希望任何其他代码需要它,我只需要它可以轻松/正确地访问Configure(似乎是运行类似方法的正确位置SubscribeAsync)。

启动.cs

public void ConfigureServices(IServiceCollection services)
{
    services.AddSingleton<IBus>(RabbitHutch.CreateBus("host=localhost"));
    services.AddSingleton<AutoSubscriber>(provider => new AutoSubscriber(provider.GetRequiredService<IBus>(), Assembly.GetExecutingAssembly().GetName().Name));
}

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    app.ApplicationServices.GetRequiredService<AutoSubscriber>().SubscribeAsync(Assembly.GetExecutingAssembly());
}
Run Code Online (Sandbox Code Playgroud)

我应该使用托管服务(我应该实现启动/停止方法还是BackgroundService可以)?

c# easynetq asp.net-core

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

如何在 .NET Core 中使 IOptions 部分成为可选?

考虑一个可选择支持 LDAP 身份验证的示例服务,否则,它会执行类似本地身份验证的操作。当 LDAP 完全配置完毕后,appsettings.json 可能如下所示...

{
  "LdapOptions": {
    "Host": "ldap.example.com",
    "Port": 389
  }
}
Run Code Online (Sandbox Code Playgroud)

有一个选项类。

{
  "LdapOptions": {
    "Host": "ldap.example.com",
    "Port": 389
  }
}
Run Code Online (Sandbox Code Playgroud)

Startup 具有预期的配置调用。

public class LdapOptions
{
    public string Host { get; set; }
    public int Port { get; set; } = 389;
}
Run Code Online (Sandbox Code Playgroud)

当我有完整有效的“LdapOptions”部分时,这非常有用。但是,如果我故意将该部分从我的应用程序设置中删除,那就不太好了。

IOptions<TOptions>即使我将该部分完全排除在我的应用程序设置之外,实例也会解析;如果我完全删除启动配置调用,它甚至可以解决!我得到一个对象,根据属性值,该对象显示为default(TOptions).

service.Configure<LdapOptions>(nameof(LdapOptions));
Run Code Online (Sandbox Code Playgroud)

如果有意省略某个部分,我不想依赖于检查属性。我可以想象这样的场景:对象中的所有属性都有明确的默认值,而这是行不通的。我想要类似 aMaybe<TOptions>的HasValue属性,但我会选择 a null。

有什么办法可以使选项部分成为可选的吗?


更新:请注意,我还打算验证数据注释......

public AuthenticationService(IOptions<LdapOptions> ldapOptions)
{
    this.ldapOptions = ldapOptions.Value; // never null, …
Run Code Online (Sandbox Code Playgroud)

asp.net-core

5
推荐指数
2
解决办法
3290
查看次数

"连贯"的良好定义

我试图告诉别人他的代码不是"连贯的",因为它有多种用途.我认为我不能很好地解释它,所以我正在寻找一个很好的参考和/或定义.

cohesion

4
推荐指数
2
解决办法
7459
查看次数

为什么Hudson不会将xcopy识别为命令?

我的哈德森构建步骤中有一个Windows批处理命令,基本上是:

 xcopy /s *.* \\serverlocation\buildname\
Run Code Online (Sandbox Code Playgroud)

副本失败了:

'xcopy' is not recognized as an internal or external command, operable program or batch file.
Run Code Online (Sandbox Code Playgroud)

但是,xcopy可以在命令行上使用(就像复制一样).我需要做些什么来使哈德森使用xcopy?

编辑:我的路径是

PATH=C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\Program Files\Perforce;C:\Program Files\CVSNT;C:\Program Files\CVSNT\
Run Code Online (Sandbox Code Playgroud)

这可能是它从命令行运行的原因.

windows hudson xcopy

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

如何解决此 SSRS 身份验证异常?

我正在尝试在 SSRS 2008(不是 R2)中实现一些自定义安全代码,以允许表单身份验证而不是 Windows 身份验证。我的解决方案基于 Microsoft 示例代码,并设法使其大部分工作正常。我唯一遇到问题的地方是登录到实际的报表管理器 URL 时。

问题 1 使用 URL 时,http://localhost/Reports_MSSQL2008/它不会选取UILogon.aspx我复制到/Pages文件夹中的页面(按照 Microsoft 示例的说明)。我修改了 ReportManager 文件夹中的 web.config 以包含以下内容:

<authentication mode="Forms">
  <forms loginUrl="UILogon.aspx" 
         name="sqlAuthCookie" 
         timeout="60" 
         slidingExpiration="true" 
         path="/" />
</authentication>
Run Code Online (Sandbox Code Playgroud)

我尝试更改路径以匹配 aspx 文件的确切路径,但仍然没有乐趣!

问题 2 由于上述问题,我尝试通过 URL 进入 UILogon 和 ReportManager http://localhost/Reports_MSSQL2008/Pages/UILogon.aspx。这是因为我可以进入我的自定义代码(UILogon.aspx.cs 和 IAuthorisation / IAuthentication 代码),我可以看到它执行以下操作:

  • 验证/授权用户
  • 创建 cookie
  • 将 cookie (sqlAuthCookie) 存储在响应/请求 cookie 容器上
  • 执行 response.redirect 到 /Folder.aspx 页面

问题是,当 response.redirect 返回到 GetUserInfo() 方法时,HttpContext.Current.User 为空,并且不再有 cookie。因此,返回一个空的 IIdentity(不能将它设置为其他任何东西!!)并且 SSRS 抛出错误......

Microsoft.ReportingServices.Diagnostics.Utilities.AuthenticationExtensionException: …

.net security ssrs-2008 formsauthentication

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

如何让ReSharper停止在我的MSpec成员上放置显式访问修饰符?

我正在使用Machine.Specifications,我真的很烦恼VS2010/Resharper如何继续尝试格式化我的代码...例如:

Establish context = () => the_cartoon_repository = DependencyOf<INHibernateRepository<Cartoon>>();
Run Code Online (Sandbox Code Playgroud)

变成了:

private Establish context = () => the_cartoon_repository = DependencyOf<INHibernateRepository<Cartoon>>();
Run Code Online (Sandbox Code Playgroud)

我按下回车键.哎呀!必须要解决这个问题,不是吗?

c# resharper mspec

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

如何使用Gallio在Visual Studio的测试系统中运行MSpec?

我正在尝试使用Gallio在Visual Studio的测试系统中运行MSpec测试,但它似乎忽略了IDE中的MSpec插件.我做了什么:

  1. 安装了Gallio
  2. 在我的测试项目中添加了MSpec NuGet包
  3. 在我的测试项目中添加了Gallio NuGet包
  4. 将MSpec Gallio集成所需的三个文件复制到Gallio安装目录中的"MSpec"文件夹
  5. 写了MSpec测试
  6. 在IDE中执行"解决方案中的所有测试"

这产生了以下错误

"没有运行任何测试,因为没有加载测试或禁用了选定的测试"

为了检查Gallio本身,我添加了对MbUnit的引用并创建了一个简单的MbUnit测试.我还运行了Gallio的其他工具来检查插件是否被拾取.我甚至重新启动了VS.

结果

运行测试使用Gallio.Echo或Gallio.Icarus成功执行都MbUnit的和MSpec测试,所以这个插件是被拾起.从Visual Studio运行测试运行MbUnit测试但不运行MSpec测试,因此Gallio集成似乎正在运行(而不是MSpec插件).有什么想法吗?

在任何人提到它之前:是的,我宁愿使用ReSharper,但目前我的情况不是许可证.

gallio visual-studio-2010 mspec

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

我可以将ReSharper TODO转换为编译器警告吗?

安装ReSharper后,就会发表评论

// TODO: fix this glaring defect
Run Code Online (Sandbox Code Playgroud)

突出显示并显示在待办事项资源管理器窗口中.有没有办法将这些变成编译器警告?

c# resharper compiler-warnings

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

为什么AutoHotkey不支持参数列表中间的默认参数?

在AutoHotkey中,您可以在内置函数调用的中间省略参数,如下所示:

MsgBox, 4,, Blah
MouseGetPos,,, MouseWin
Run Code Online (Sandbox Code Playgroud)

您还可以使用可选参数àlaC++创建函数:

Foobar(baz, blah="something")
{
  MsgBox baz=%baz%, blah=%blah%
}
Run Code Online (Sandbox Code Playgroud)

但是文档说,在创建函数时,在默认参数之后不能有非默认参数.尝试这样做会导致解释器错误,说明默认参数后的第一个非默认参数需要默认值.

为什么?这样称呼它有什么问题?

Foobar(baz, blah="something", blivet)
{
  MsgBox baz=%baz%, blah=%blah%, blivet=%blivet%
}

Foobar("cat",,"dog")
Run Code Online (Sandbox Code Playgroud)

有没有办法在中间创建带可选参数的函数?

autohotkey default-value optional-parameters

4
推荐指数
2
解决办法
1555
查看次数