尝试将 Azure 上的 Sqlite 数据库与默认的 dotnet core 示例应用程序一起使用,并进行身份验证和授权。在我的本地计算机上,它将数据库放在/Users/me/Projects/myProj/bin/Debug/netcoreapp1.0/myProj.db- 并且我的appsettings.json包含以下内容:
"ConnectionStrings": {
"DefaultConnection": "Data Source=myProj.db"
Run Code Online (Sandbox Code Playgroud)
因此,现在当我在没有 appsettings.json 的情况下上传到 azure 时,我必须在 azure 的“应用程序设置”->“连接字符串”部分中配置连接。我遇到的部分问题是,当我git push从本地主机到天蓝色时,数据库的位置发生了变化。它被移动到d:\home\site\wwwroot. 我知道我必须更改连接字符串,但是我对我认为应该表明的各种更改失败了 - 我是否包含“数据源”部分?或者...我需要报价吗?我看到一篇相关的帖子,在对问题的评论中给出了一个有趣的答案,但这没有用。
我们正在构建一个使用 System.Drawing 包的 .Net Core 2.0 C# Web 应用程序。
我在Mac上编写代码,但它也会在Windows机器上开发,并部署到Linux服务器上。
要在 OSX 上使用 System.Drawing,我必须将 runtime.osx.10.10-x64.CoreCompat.System.Drawing Nuget 包添加到我的项目依赖项中。
但该代码现在无法在 Windows 机器上运行。当尝试使用 Graphics(System.Drawing 的一部分)对象的 DrawString 方法时,我们得到 System.AccessViolationException。
所以,我的问题是解决这个问题的常用方法是什么?是否可以在这个多操作系统设置中使用 System.Drawing 类?
我需要检查三种可能的异常类型中的一种。如果抛出这些异常之一,则测试视为通过。我正在将[Theory]和用于[MemberData]多种场景。
[Theory]
[MemberData(nameof(GetInvalidMimeMessages))]
public async Task ProcessAsync_TestFail(MimeMessage message)
{
var stub = Mock.Of<IOptions<ScrapyardFilesOptions>>(s => s.Value.ConnectionString == "UseDevelopmentStorage=true" && s.Value.Container == "exchange");
var loggerMock = new Mock<ILogger<ScrapyardFilesHandler>>(MockBehavior.Loose);
var scrapyard = new ScrapyardFilesHandler(loggerMock.Object, stub);
var ex = await Assert.ThrowsAnyAsync<Exception>(() => scrapyard.ProcessAsync(message));
// imagine solution somehow like that
Assert.IsType(
{
typeof(NullReferenceException) ||
typeof(KeyNotFoundException) ||
typeof(InvalidOperationException) ||
},
ex);
}
private static IEnumerable<object[]> GetInvalidMimeMessages()
{
yield return new object[] { null };
yield return new object[] { new MimeMessage() }; …Run Code Online (Sandbox Code Playgroud) 我有一个服务对象,它只是对 Microsoft SQL 数据库之上的 EF Core 存储库执行查询。我正在尝试将这些同步方法转换为异步版本。这是一种简化方法的示例......
同步版本
public List<Contact> GetContacts()
{
var ret = this.dbContext.Contacts.ToList();
return ret;
}
Run Code Online (Sandbox Code Playgroud)
我已经看到了几种不创建异步方法的方法......再说一遍......我已经看到了几种不同的方法来说明你应该如何创建异步方法。我陷入了以下两种方法中的哪一种被认为是创建异步方法的“正确”或“最佳”方式之间。
异步版本 1
public Task<List<Contact>> GetContactsAsync()
{
return Task.FromResult(this.dbContext.Contacts.ToList());
}
Run Code Online (Sandbox Code Playgroud)
或者
异步版本 2
public async Task<List<Contact>> GetContactsAsync()
{
List<Contact> ret = null;
await Task.Run(()=>{
ret = this.dbContext.Contacts.ToList();
});
return ret;
}
Run Code Online (Sandbox Code Playgroud)
如果查询包含多行逻辑,则可能会使情况进一步复杂化。
这是包含更多细节的相同方法。如果您看到异步主题之外的问题,那么我很乐意在 PM 或其他内容中听到它们,但是对于这个线程,我想专注于等待/异步的东西。
完整的同步代码
public PaginationResult<Contact> GetContacts(PaginationSpec pagingSpec, List<Expression<Func<Models.Contact, bool>>> filter = null)
{
IQueryable<Contact> query = ContactService.GetContactQuery(this.ctx);
if (filter != null && filter.Count > 0)
{ …Run Code Online (Sandbox Code Playgroud) 在我的 ASP.NET Core 应用程序中,我以以下形式创建了几个(十几个)方法
public async Task DoStuff()
{
// ...
}
Run Code Online (Sandbox Code Playgroud)
所以,没有返回类型。
后来,我意识到我不小心忘记在调用方方法中到处包含此类方法(显然没有 async 关键字,因为异步“僵尸病毒”还没有传播那么远)。
在执行过程中,没有任何不良后果。
问题是,当这种事情发生时,Visual Studio 也不会生成任何警告消息,我问自己,在这种情况下,实际上是否存在忽略等待的危险?我知道 await 应该自然地应用于每个异步方法,但是当调用者实际上没有可使用的返回值时,我真的不明白这背后的原因。也许有捕获异常的东西?
我还没有找到任何明确的答案,因为一般声明是“只包含等待”。不管你信不信,这个异步/等待的东西,我相对较新,不时地反复咬我。
这里有一个奇怪的...我有以下 C# 代码:
static void Main(string[] args)
{
try
{
var url = "https://www.nordea.com/wemapp/api/fi/lists/currency/electronicExchangeFI.dat";
var result = DownloadData(url);
}
catch (Exception e)
{
Console.WriteLine(e);
throw;
}
}
private static string DownloadData(string url)
{
var webClient = new WebClient();
byte[] xmlData = webClient.DownloadData(url);
webClient.Dispose();
string data = string.Empty;
if (xmlData.Length > 0)
{
data = System.Text.Encoding.Default.GetString(xmlData);
}
return data;
}
Run Code Online (Sandbox Code Playgroud)
使用这个特定的网站(一些汇率数据),上述作为 .NET Core/5 控制台应用程序失败,但它在 .NET Framework (4.7) 中按预期工作
在 .NET Core 中,我在方法上遇到以下异常webClient.DownloadData(url);-
WebClient 请求期间发生异常。
内部异常是
响应提前结束,预计至少有 1 个额外字节。
我也试过使用, …
我有一堂课
public class A
{
public A(IB b)
{
}
public void Method1()
{
}
}
Run Code Online (Sandbox Code Playgroud)
class Program
{
static void Main(string[] args)
{
var serviceProvider = new ServiceCollection()
.AddSingleton<IB,B>()
.BuildServiceProvider();
//How to call Method1 of classA
classA a = new classA();
}
}
Run Code Online (Sandbox Code Playgroud)
如何Method1()从Main方法调用?
我收到一个编译时错误,因为“不存在重载方法”。
我正在尝试运行 HttpClient 类的简单 Msdn 文章: 在 .Net Core 控制台应用程序中创建 Http 客户端。
不幸的是,它根本不起作用并退出应用程序。
输出中没有任何内容,只是在客户端调用中被吹走。
在使用 Npsql EF Core 数据提供程序的 EF Core 中,查询如
await ctx.Doc.FromSqlRaw(@"select * from Doc where id=any('{1,2,3}')");
Run Code Online (Sandbox Code Playgroud)
抛出错误
索引(从零开始)必须大于或等于零且小于参数列表的大小。
如何在查询中使用{和}字符以使它们不被视为参数?
如果我们有 aaa 任务,并且为该任务创建一个延续(通过ContinueWith)TaskContinuationOptions.RunSynchronously,如果正在执行的方法ContinueWith如下:
static async Task SimpleMethodContinuationAsync(Task antecedentTask, object state)
{
// some very lightweight, thread-safe synchronous code.
await Task.Delay(5000); // Simulate async work.
// continuation of some more very lightweight, thread-safe synchronous code.
}
Run Code Online (Sandbox Code Playgroud)
await-之后的部分会有效释放开始执行任务延续的线程吗?这个续篇的其余部分将在哪个线程上继续?
SynchronizationContext上面的continuation的先行任务没有礼物时会问这个问题,但我听说SynchronizationContext不流经ContinueWith方法调用?真的吗?
.net-core ×10
c# ×8
async-await ×3
asynchronous ×3
.net ×1
asp.net-core ×1
azure ×1
httpclient ×1
npgsql ×1
sqlite ×1
unit-testing ×1
xunit.net ×1