我在单独的解决方案中处理几个独立的Visual Studio扩展.当我打开其中一个并在调试器中启动实验实例时,也会加载其他解决方案(未打开)的其他扩展.必须有一种方法只能在实验实例中一次启动一个扩展(特别是您当前正在处理的扩展),对吧?
这是测试项目的launchSettings.json文件:
{
"profiles": {
"test": {
"commandName": "test",
"environmentVariables": {
"Hosting:Environment": "Development"
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
测试项目依赖于服务器项目,并使用服务器项目的Startup类直接初始化测试,如下所示:
Server = new TestServer(TestServer.CreateBuilder().UseStartup<Startup>());
Client = Server.CreateClient();
Run Code Online (Sandbox Code Playgroud)
但出于某种原因,当我Startup.Configure在调试器中输入方法时,env.EnvironmentName是生产.我应该在哪里设置测试.xproj的环境名称?
在相关的说明中,我是否应该Startup在测试项目中拥有该类的本地测试版本?文档似乎暗示......否则appsettings会从何而来?他们没有将测试项目显示为在本地拥有appsettings的副本,但我非常确定Startup该类(无论是重用还是本地)都需要它.请指教.
我的API路由之一使用了原始sql merge into命令来进行原子upsert操作,并且在我的自动化测试中,TestServer使用内存db提供程序实例。它给我一个错误,可能是因为内存提供程序不支持运行原始sql命令-是这样吗?如果没有,我如何使它工作?
这是Startup测试的课程:
// In memory DB for testing
services.AddDbContext<MyContext>(optionsBuilder => optionsBuilder.UseInMemoryDatabase("stuff"));
services.AddDbContext<MyStatusContext>(optionsBuilder => optionsBuilder.UseInMemoryDatabase("status"));
services.AddDbContext<MyUserRolesContext>(optionsBuilder => optionsBuilder.UseInMemoryDatabase("userroles"));
Run Code Online (Sandbox Code Playgroud)
API代码符合您的期望:
var count = await context.Database.ExecuteSqlCommandAsync(@"merge into ...", default(CancellationToken), ...);
return count;
Run Code Online (Sandbox Code Playgroud)
这段代码在实际数据库中的生产环境中运行良好,但是我无法在测试中与内存提供程序一起使用。我有什么希望吗?自定义sql脚本的通常测试策略是什么?
我按照这篇文章为我的实体制作了每个类型的表继承模型,但是当我尝试将子类的实例添加到数据库时,我收到以下错误.
以下是我创建子类型的方法:
var cust = db.Users.CreateObject<Customer>(); // Customer inherits User
db.Users.AddObject(cust);
db.SaveChanges();
Run Code Online (Sandbox Code Playgroud)
我拨打最后一个电话时收到以下错误:
"在不止一个位置生成跨实体或关联共享的值.检查映射是否不会将EntityKey拆分为多个存储生成的列."
具有以下内部异常:
"已经添加了具有相同键的项目."
关于我可能遗失的任何想法?
更新了REPRO STEPS
创建了一个空白的MS SQL Server 2008 R2数据库,并添加了以下两个表:
接下来,我从数据库生成了.edmx实体模型,并按照顶部的链接逐字.也就是说,我删除了User和Customer之间的关联,将User设置为Customer的基类,从Customer实体中删除了Id属性,并确保Customer.Id列已映射到继承的User.Id属性.然后我运行了以下小程序:
using (var db = new EF_Test.testEntities())
{
var cust = db.Users.CreateObject<Customer>();
db.Users.AddObject(cust);
db.SaveChanges();
}
Run Code Online (Sandbox Code Playgroud)
我得到了与上述相同的例外情况.如果这个repro对你有用,请告诉我,如果有,那我做错了.我在这个问题上被封锁了.
我有一个像这样的文件夹结构:
A/B/C/hello.txt
Run Code Online (Sandbox Code Playgroud)
我使用svn mv将A重命名为Z:
Z/B/C/hello.txt
Run Code Online (Sandbox Code Playgroud)
然后我对hello.txt进行了一些修改.现在,svn状态给出:
D A/B/C/hello.txt
A+ Z
M+ Z/B/C/hello.txt
Run Code Online (Sandbox Code Playgroud)
当我尝试提交时,我收到以下错误消息:
'Z/B/C' is not under version control and is not part of the commit, yet its child 'Z/B/C/hello.txt' is part of the commit
Run Code Online (Sandbox Code Playgroud) 给定一个binary(16)列,如何将其值显示为十六进制数?我一直在下面的控制台中进行实验,但未获得预期的结果。可能是我没有将数字正确转换为二进制吗?
我有以下示例查询:select hex(cast(10 as binary)),
但输出是相当意外:3130。
基本上,它似乎只是采用数字的十进制表示形式,并3在每个数字之前插入一个数字,例如2-> 32,22-> 3232,678-> 363738等。
如果我为二进制数据类型指定了一个长度(例如binary(16)),我将得到相同的行为,只是在右边用所需的0s 填充。
显然,这不是我想要的。我想念什么?
编辑:只是尝试convert(678, binary)而不是cast,相同的行为。
我有一些像这样的Velocity宏:
#macro(Alpha)
#set($p = 1)
#@Beta()
$p // 1
$bodyContent
#end
#end
#macro(Beta $params)
#set($p = 2)
$p // 2
$bodyContent
#end
Run Code Online (Sandbox Code Playgroud)
而我正在使用它们:
#set($p = 0)
#@Alpha(...)
$p // 3
#end
Run Code Online (Sandbox Code Playgroud)
我相信这样渲染(忽略格式化):2,2,2
但我希望有适当的关闭行为,包括隐藏父范围名称的更多本地范围名称.特别是,标记为'3'的$ p的使用应该是值0,'2'表示值2,'1'表示值1.
给定正确的闭包语义,它将打印:2,1,0
有没有办法得到这个,或者一种方法来实现自定义指令/修改#macro指令行为来实现这一目标?
我正在尝试从使用 SignalR 的 ASP.NET MVC5 获得基于声明的授权,并且我遵循了本教程:
http://www.asp.net/signalr/overview/signalr-20/security/hub-authorization
我尝试Authorize了集线器上的 vanilla属性以及AuthorizeClaimsAttribute它们作为示例提供的自定义类,但它们似乎都不起作用。
在后一种情况下,IPrincipal user参数以 null 形式出现。事实上,request.GetOwinContext()扩展方法返回的整个上下文似乎都没有初始化,所以试图通过对象“免费”获取它是行不通的。
但是,我确实在请求标头中看到了这些 cookie:
所有这些都包含Microsoft.AspNet.SignalR.Cookie.
是让这个工作来做我自己的 cookie 解析/解密的唯一方法吗?如果是这样,如何?