我有这个 .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) 我很好奇在 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可以)?
考虑一个可选择支持 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) 我试图告诉别人他的代码不是"连贯的",因为它有多种用途.我认为我不能很好地解释它,所以我正在寻找一个很好的参考和/或定义.
我的哈德森构建步骤中有一个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)
这可能是它从命令行运行的原因.
我正在尝试在 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 代码),我可以看到它执行以下操作:
问题是,当 response.redirect 返回到 GetUserInfo() 方法时,HttpContext.Current.User 为空,并且不再有 cookie。因此,返回一个空的 IIdentity(不能将它设置为其他任何东西!!)并且 SSRS 抛出错误......
Microsoft.ReportingServices.Diagnostics.Utilities.AuthenticationExtensionException: …
我正在使用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)
我按下回车键.哎呀!必须要解决这个问题,不是吗?
我正在尝试使用Gallio在Visual Studio的测试系统中运行MSpec测试,但它似乎忽略了IDE中的MSpec插件.我做了什么:
这产生了以下错误
"没有运行任何测试,因为没有加载测试或禁用了选定的测试"
为了检查Gallio本身,我添加了对MbUnit的引用并创建了一个简单的MbUnit测试.我还运行了Gallio的其他工具来检查插件是否被拾取.我甚至重新启动了VS.
结果
运行测试使用Gallio.Echo或Gallio.Icarus成功执行都MbUnit的和MSpec测试,所以这个插件是被拾起.从Visual Studio运行测试运行MbUnit测试但不运行MSpec测试,因此Gallio集成似乎正在运行(而不是MSpec插件).有什么想法吗?
在任何人提到它之前:是的,我宁愿使用ReSharper,但目前我的情况不是许可证.
安装ReSharper后,就会发表评论
// TODO: fix this glaring defect
Run Code Online (Sandbox Code Playgroud)
突出显示并显示在待办事项资源管理器窗口中.有没有办法将这些变成编译器警告?
在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)
有没有办法在中间创建带可选参数的函数?