小编Jer*_*ney的帖子

Androidmanifest 和 build.gradle 中的 minsdk 和 targetsdk 两者?

我刚刚将一个项目从 Exclipse 迁移到了 Android Studio。该build.gradle文件有一个部分,其中包括:

defaultConfig {
    applicationId "com.example.someone.myapplication"
    minSdkVersion 8
    targetSdkVersion 23
    versionCode 1
    versionName "1.0"
}
Run Code Online (Sandbox Code Playgroud)

同样的事情在uses-sdk的元素AndroidManifest.xml

当两种设置同时存在时,哪些设置受到尊重?另外,我应该将它们从AndroidManifest.xml? 我的项目至少必须支持 Api-8。如果uses-sdk从清单文件中删除该部分,它对旧平台有什么影响吗?

eclipse android android-studio

3
推荐指数
1
解决办法
1632
查看次数

C# 使用 TagHelper 将对象传递到 ViewComponent

我正在尝试创建一个ViewComponent可以与 TagHelpers 一起使用的对象,其中我传入一个对象作为参数。

\n\n

例如,我有这个ViewComponent\xe2\x80\x94 最终可能会有更多参数:

\n\n
public IViewComponentResult Invoke(string? pageTitle, string? description, string? headerView)\n
Run Code Online (Sandbox Code Playgroud)\n\n

我想做一些类似的事情:

\n\n
public class PageHeaderViewComponentOptions \n{\n    public string pageTitle2;\n    public string Description;\n}\n\npublic IViewComponentResult Invoke(PageHeaderViewComponentOptions phvc)\n
Run Code Online (Sandbox Code Playgroud)\n\n

并像这样使用它:

\n\n
<vc:page-header phvc:page-title2="Test Title"></vc:page-header>\n
Run Code Online (Sandbox Code Playgroud)\n\n

但是,这不起作用。

\n\n

我还尝试显式设置参数类的属性信息,如下所示:

\n\n
[HtmlTargetElement("PageHeaderViewController")]\npublic class PageHeaderViewComponentOptions\n{\n    [HtmlAttributeName("page-title")]\n    public string pageTitle2 { get; set; }\n    public string Description;\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

也没有运气。

\n\n

我的想法是我可以将该对象直接传递给视图。键入此内容,我想知道单独传递参数然后将每个参数分配给特定视图模型的成员是否是一个更好的主意。

\n\n

任何帮助将不胜感激。

\n

asp.net-core asp.net-core-tag-helpers c#-8.0 asp.net-core-viewcomponent asp.net-core-3.0

3
推荐指数
1
解决办法
2376
查看次数

如何检查 ASP.NET Core 3.0 的单元测试中是否记录了错误?

我想创建一个单元测试以确保方法使用 xUnit 和 Moq 记录错误。此代码适用于 ASP.NET Core 2.1:

//Arrange
var logger = new Mock<ILogger<MyMiddleware>>();
var httpContext = new DefaultHttpContext();

var middleware = new MyMiddleware(request => Task.FromResult(httpContext), logger.Object);

//Act
await middleware.InvokeAsync(httpContext);

//Assert
logger.Verify(x => x.Log(LogLevel.Error, It.IsAny<EventId>(), It.IsAny<FormattedLogValues>(), It.IsAny<Exception>(), It.IsAny<Func<object, Exception, string>>()), Times.Once);
Run Code Online (Sandbox Code Playgroud)

为了验证_logger.LogError("Error message");middleware.InvokeAsync.

但是,在 ASP.NET Core 3.0 中,我无法验证是否正在调用记录器。Microsoft.Extensions.Logging.Internal不能再引用,所以FormattedLogValues不可用。

我尝试更改Assert()to useobject而不是FormattedLogValues,而且IReadOnlyList<KeyValuePair<string, object>>因为那FormattedLogValues是基于(FormattedLogValues.cs)。

这是我在 Visual Studio 测试运行程序中收到的错误消息:

Message: 
    Moq.MockException : 
    Expected invocation …
Run Code Online (Sandbox Code Playgroud)

c# moq xunit.net asp.net-core asp.net-core-3.0

3
推荐指数
1
解决办法
1446
查看次数

对 Azure 应用服务上的 500.31 ANCM 进行故障排除

将项目从ASP.NET Core 3.0升级到ASP.NET Core 3.1后,我的应用程序停止在Azure App Services \xe2\x80\x94上运行,但仅在使用Azure DevOps Pipelines 的持续部署进行发布时停止运行。(与另一个问题类似,如果我直接从 Visual Studio 发布,它会继续工作。)

\n

具体来说,管道仍然能够使用Azure App Service Deploy ( AzureRmWebAppDeployment) 任务进行发布,但无法在 Azure App Service 环境中加载,并出现500.32 异常

\n
\n

500.31 ANCM 无法找到本机依赖项

\n

此问题的常见解决方案:

\n

找不到指定版本的 Microsoft.NetCore.App 或 Microsoft.AspNetCore.App。

\n
\n

现在,我对未安装 .NET Runtime 的情况下的此错误非常熟悉,这在 Microsoft 发布新版本后很常见。在这些情况下,典型的解决方案是:

\n
    \n
  1. 发布为--self-contained应用程序的版本,或
  2. \n
  3. 启用适当的运行时作为应用服务扩展(如果可用)。
  4. \n
\n

在这种情况下,我知道.NET Core 3.1.2 运行时在应用服务环境中可用,并且还确认这些解决方案无法解决问题。这表明存在不同的潜在错误。

\n …

webdeploy azure-web-app-service asp.net-core azure-pipelines asp.net-core-3.1

3
推荐指数
1
解决办法
4986
查看次数

将 C# 8 可空引用类型标记为“这不能为空”

我正在尝试新的可为空引用类型 C# 8.0。我遇到了一个小问题:

foreach(FileSystemAccessRule rule in directorySecurity.GetAccessRules(true, true, typeof(System.Security.Principal.NTAccount)))
{
    // do something with rule
}
Run Code Online (Sandbox Code Playgroud)

这显示了一个警告,因为编译器认为rule 可能null,而它永远不会是。

我目前的修复是这样的:

foreach(FileSystemAccessRule? rule in directorySecurity.GetAccessRules(true, true, typeof(System.Security.Principal.NTAccount)))
{
    if (rule == null) continue;
    // do something with rule
}
Run Code Online (Sandbox Code Playgroud)

但我会更高兴修复,像[NeverNull]FileSystemAccessRule rule或类似的东西。有没有办法实现这一目标?

c# nullable c#-8.0 nullable-reference-types

3
推荐指数
1
解决办法
126
查看次数

.NET Core 自访问查询过滤器

我正在寻找解决EntityFramework Core Bug 的方法。我正在尝试编写一个对自身进行过滤的查询。

免责声明: 我正在做一些比通过显式过滤更复杂的事情userId,为了简单起见,我只是将它与硬编码值一起使用,因为确切的实现与我的问题无关。

protected override void OnModelCreating(ModelBuilder modelBuilder) =>
    modelBuilder.Entity<ConversationSubscription>()
        .HasQueryFilter(x => x.Conversation.ConversationSubscriptions
            .Select(c => c.UserId).Contains(315)
        );
Run Code Online (Sandbox Code Playgroud)

由于查询过滤器试图访问它正在过滤的实体,因此它最终陷入无限循环。由于我们使用的是ModelBuilder而非DbSet,因此无法将其标记为IgnoreQueryFilters

鉴于此,我尝试使用当前上下文来过滤自身:

modelBuilder.Entity<ConversationSubscription>().HasQueryFilter(x => 
    this.Set<ConversationSubscription().AsNoTracking().IgnoreQueryFilters()
        .Where(cs => cs.ConversationId == x.ConversationId)
            .Select(c => c.UserId)
            .Contains(315)
);
Run Code Online (Sandbox Code Playgroud)

然而,这会抛出一个InvalidOperationException,很可能是因为我们试图在OnModelCreating完成之前使用上下文。

我觉得有一种方法可以解决这个问题,如果我能以某种方式选择ConversationSubsriptions匿名类型,这样它们就不会被过滤。

编辑:我试图使用匿名类型来解决这个问题,但没有运气。

modelBuilder.Entity<ConversationSubscription>().HasQueryFilter(c =>
    x => x.Conversation.Messages.Select(m => new {
        Value = m.Conversation.ConversationSubscriptions.Distinct()
            .Select(cs => cs.UserId).Contains(c.Variable(this._userId)) 
    }).FirstOrDefault().Value
);
Run Code Online (Sandbox Code Playgroud)

c# entity-framework-core .net-core .net-core-3.1 ef-core-3.1

3
推荐指数
1
解决办法
268
查看次数

您能否将面向完整框架的包导入到 ASP.NET Core 3+ 应用程序中?

我的理解是,从 ASP.NET Core 3.0 开始,.NET Framework 是不受支持的目标框架,因此您只能在 .NET Core 运行时上运行。

如果是这种情况,哪些 NuGet 包可以导入到 ASP.NET Core 3 应用程序中?

我假设您可以引用任何针对 的包netstandard,但是仅针对完整框架的包(即,仅针对 的旧包net45)呢?

如果您导入的包引用了一个不属于 .NET Core 的程序集,即,会发生System.Drawing什么?

asp.net-core .net-standard asp.net-core-3.0

3
推荐指数
1
解决办法
1335
查看次数

如何将大型标志枚举存储到 SQL 数据库中的单个列?

我有这个枚举:

[Flags]
public enum Actions 
{
    None = 0,
    MoveUp = 1,
    MoveDown = 2,
    MoveRight = 3,
    MoveLeft = 4
}
Run Code Online (Sandbox Code Playgroud)

我想要这样的表的列:

Id | UserId | Actions
.. | ..     | ..
Run Code Online (Sandbox Code Playgroud)

我对如何存储枚举感到困惑,因为用户可以有多个操作,并且我不想使用另一张表来存储操作。我有超过 50 个操作,这就是我使用该Flags属性的原因。

actionssUser = Actions.MoveUp | Actions.MoveRight | ....... 
Run Code Online (Sandbox Code Playgroud)

c# sql enums enum-flags entity-framework-core

3
推荐指数
1
解决办法
1953
查看次数

如何将 .NET Core 2.2 Web API 迁移到 .NET Core 3.0?

我正在遵循Microsoft 的迁移指南,但失败了。因此,相反,我使用 .NET 2.2 创建了一个新项目来建立一个干净的模板,然后尝试迁移到 .NET Core 3.0。但它又一次失败了。在Startup.cs,依赖注入找不到方法services.AddMvc()

看来我的代码仍然指的是 .NET 2.2 而不是 .NET 3.0。

如果我运行dotnet watch run,我会收到以下错误:

应用程序启动异常 System.InvalidOperationException:端点路由不支持“IApplicationBuilder.UseMvc(...)”。要使用 'IApplicationBuilder.UseMvc' 在 'ConfigureServices(...) 中设置 'MvcOptions.EnableEndpointRouting = false'。在 Microsoft.AspNetCore.Builder.MvcApplicationBuilderExtensions.UseMvc(IApplicationBuilder app, Action'1 configureRoutes) 在 Microsoft.AspNetCore.Builder.MvcApplicationBuilderExtensions.UseMvc(IApplicationBuilder app) 在 netmig.Startup.Configure(IApplicationBuilder app, IHostingEnvironment env) 在 E:\ testapp\netmig\Startup.cs:System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor, Boolean wrapExceptions) at System.Reflection.RuntimeMethodInfo.Invoke(Object obj,
在 Microsoft.AspNetCore.Hosting.ConfigureBuilder.Invoke(Object instance, IApplicationBuilder builder) 在 Microsoft.AspNetCore.Hosting.ConfigureBuilder.<>c__DisplayClass4_0.b__0(IApplicationBuilder builder) 在 Microsoft.AspNetCore.Hosting.GenericWebHostBuilder.<>c__DisplayClass13_0.b__2( IApplicationBuilder 应用程序) 在 Microsoft.AspNetCore.Mvc.Filters.MiddlewareFilterBuilderStartupFilter.<>c__DisplayClass0_0.g__MiddlewareFilterBuilder|0(IApplicationBuilder builder) 在 Microsoft.AspNetCore.HostFilteringStartupFilter.<>c__DisplayClass0_0.b__0(IApplicationBuilder 应用程序) 在 …

c# asp.net-core-mvc .net-core asp.net-core asp.net-core-3.0

2
推荐指数
1
解决办法
6171
查看次数

当应用程序进入后台时不触发离子事件(平台暂停)

我想在我的应用程序进入后台时执行一些操作 - 例如,当按下主页按钮时。(我正在 Android 设备上进行测试。)

我在我的尝试了以下内容app.component.ts

this.platform.ready().then(() => {
    this.platform.pause.subscribe(async () => {
      alert("Pause event detected"); 
      //Do stuff here
    });

    this.platform.resume.subscribe(async () => {
      alert("Resume event detected");
      //Do stuff here
    });
…
Run Code Online (Sandbox Code Playgroud)

我也试过:

App.getState().then((result) => {
  alert("state active?" + result.isActive);
});
Run Code Online (Sandbox Code Playgroud)

当应用程序进入后台时(例如,通过按下主页按钮)不会触发侦听器。但是当我再次启动应用程序时,所有事件都会被触发(在本例中为警报),包括platform.pause事件。

我正在使用 Ionic 9 和电容器。

我误解了什么吗?可能是什么问题呢?

android cordova ionic-framework angular capacitor

2
推荐指数
1
解决办法
1359
查看次数