标签: coreclr

如何在新的coreclr世界中模拟对象?

在单元测试时,我一直使用Moq来模拟外部依赖项.既然我正在尝试使我的代码完全跨平台,我想让我的单元测试也在linux上运行,所以我的目标是我的项目coreclr50.

问题是我似乎找不到任何可以让我在coreclr上模拟的模拟库.LightMock.vNext尝试这样做,但它需要手动创建模拟类,这是不方便的.

我想知道人们如何对他们的MVC 6控制器进行单元测试!

c# mocking coreclr dnx asp.net-core

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

.net 核心中 nuget 目标文件的等价物是什么

我有一个通过 Nuget 分发的库。在该包中,我有一个 .targets 文件,该文件包含在消费项目的 csproj 中(通过 nuget),以便 MSBuild 可以在构建期间执行任务(这有效地允许我将构建步骤注入到消费项目中。)该任务基本上调用包含在 nuget 包的“工具”文件夹中的可执行文件。

我想知道如何使用 .Net core 和新的 dotnet cli 来实现这个功能?

请参阅http://docs.nuget.org/Create/Creating-and-Publishing-a-Package 上的“将 MSBuild 目标和道具文件导入项目”部分

.net nuget coreclr

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

如何解决nuget包之间的版本冲突

我正在使用一个 ASP.NET Core 应用程序,其中我依赖于两个冲突的 nuget 包。包恢复输出显示冲突,如下所示:

Version conflict detected for System.Collections.
MyProject (>= 2.0.0) -> Microsoft.AspNetCore.Mvc.TagHelpers (>= 1.0.0) -> Microsoft.AspNetCore.Mvc.Razor (>= 1.0.0) -> Microsoft.AspNetCore.Mvc.ViewFeatures (>= 1.0.0) -> Microsoft.AspNetCore.Mvc.DataAnnotations (>= 1.0.0) -> Microsoft.Extensions.Localization (>= 1.0.0) -> Microsoft.AspNetCore.Hosting.Abstractions (>= 1.0.0) -> Microsoft.Extensions.Configuration.Abstractions (>= 1.0.0) -> System.Linq (>= 4.1.0) -> System.Collections (>= 4.0.11)
MyProject (>= 2.0.0) -> Microsoft.NETCore.Runtime.CoreCLR-x64 (>= 1.0.0) -> System.Collections (= 4.0.10).
Run Code Online (Sandbox Code Playgroud)

当我使用 CoreCLR-x64 的预发行版本时,我在 System.Collections 上遇到另一个冲突:

Version conflict detected for System.Collections.
 MyProject (>= 2.0.0) -> Microsoft.AspNetCore.Mvc.TagHelpers (>= 1.0.0) -> Microsoft.AspNetCore.Mvc.Razor …
Run Code Online (Sandbox Code Playgroud)

collections version nuget-package coreclr

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

asp.net core 会话不是特定于用户的吗?

当我使用经典的 ASP.NET 甚至旧的 Web 表单时,HttpContext.Current.Session 是特定于用户的。因此,当用户发出请求时,他会收到会话 cookie,然后该会话仅属于该用户。因此,两个不同的用户可以在各自的会话中拥有相同名称的会话密钥。

\n\n

我正在阅读有关 ASP.NET Core 中会话的文档,看起来它与旧的 asp.net 具有相同的概念,但是文档中的某些注释令人困惑。
\n这里

\n\n
\n

会话存储依赖于基于 cookie 的标识符来访问与给定浏览器会话相关的数据(来自特定浏览器和计算机的一系列请求)。您不一定可以假设会话仅限于单个用户,因此请小心在 Session 中存储的信息类型。这是存储特定于特定会话的应用程序状态的好地方,但不需要永久保留\xe2\x80\x99

\n
\n\n

也在这里

\n\n
\n

会话是非锁定的,因此如果两个请求都尝试修改会话的内容,则最后一个请求将获胜。此外,会话被实现为连贯会话,这意味着所有内容都存储在一起。这意味着,如果两个请求正在修改会话的不同部分(不同的密钥),它们仍然可能会相互影响。

\n
\n\n

所以可以说我已经登录了 User1 并且根据我设置的某些操作

\n\n
 `Session.SetInt32("key1", 123)`\n
Run Code Online (Sandbox Code Playgroud)\n\n

现在 User2 从其他机器登录并根据我设置的某些操作

\n\n
 `Session.SetInt32("key1", 999)`\n
Run Code Online (Sandbox Code Playgroud)\n\n

问题 1
\n这会覆盖 User1 的密钥吗?

\n\n

另请注意这里

\n\n
\n

ASP.NET 附带了 IDistributedCache 的多个实现,\n 包括内存中选项(仅在开发和\n 测试期间使用)

\n
\n\n

问题 2
\n我可以在生产中使用 IDistributedCache 的其他实现是什么?

\n

asp.net-core-mvc coreclr asp.net-core asp.net-core-1.0

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

IClaimsTransformer有什么用?

在ASP.Net核心中,您可以使用IClaimsTransformer的实现.

你这样注册:

app.UseClaimsTransformation(o => o.Transformer = new MyClaimsTransformer());
Run Code Online (Sandbox Code Playgroud)

履行

public class MyClaimsTransformer : IClaimsTransformer
{
    public Task<ClaimsPrincipal> TransformAsync(ClaimsTransformationContext context)
    {
        var identity = context.Principal.Identity as ClaimsIdentity;

        foreach (var claim in ci.Claims)
        {
           // you cannot modify claim.Type or claim.Value here
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但是ClaimsIdentity.Claims是只读属性.此外Claim.Type,Claim.Value是readonly属性.

这意味着在实施中IClaimsTransformer您只能添加新的声明.您无法删除或修改现有声明.

那么IClaimsTransformer的真实用途是什么?

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

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

ASP.Net Core 2-IIS 502.5错误

我正在Visual Studio 2017中创建一个ASP .Net Core(2.0)MVC应用程序,它运行正常。

在昨天关闭计算机并今天返回我的应用程序之后,当我在未调试的情况下以chrome启动应用程序时,现在收到此浏览器错误。

运行dotnet在应用程序目录内运行,我可以访问该站点就好了。只是当我通过Visual Studio / IIS Express运行它时,出现此错误。

HTTP错误502.5-进程失败

该应用程序可以很好地构建和编译。我也清洗了溶液。

查看事件日志,我发现:

  • 具有物理根目录'C:\ Users \ Ben Hawkins \ Desktop \ Development Folder \ Dev \ Website \ Version_2 \ MYAPP \ MYAPP \'的应用程序'MACHINE / WEBROOT / APPHOST / MYAPP'无法使用命令行C:\ Program Files启动进程(x86)\ Microsoft Visual Studio \ 2017 \ Community \ Common7 \ IDE \ Extensions \ Microsoft \ Web Tools \ ProjectSystem \ VSIISExeLauncher.exe -argFile“ C:\ Users \ Ben Hawkins \ AppData \ Local \ Temp \ tmp3547.tmp”' ,ErrorCode …

asp.net iis-express coreclr visual-studio-2017

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

如何在ci/cd中安装CrossGen来优化.NET Core Library

我正在尝试使用此处所述的Microsoft CrossGen 实用程序将 .NET Core 5预编译/提前 (AOT) 编译为本机映像,以缩短启动时间。

然而,获取 CrossGen的说明很模糊:

如果使用 NuGet 包安装 CoreCLR,则可以在 NuGet 包的工具文件夹中找到 CrossGen。

如何通过 NuGet 安装 CrossGen?

到目前为止我尝试过的:

  1. 创建一个写入deleteme.csproj磁盘并具有<PackageReference Include="Microsoft.NETCore.App.Runtime.win-x64" Version="3.1.6" />

  2. 跑步dotnet restore deleteme.csproj。这会将 Crossgen nuget 包下载到本地缓存。

  3. 我现在可以跑了~/.nuget/packages/microsoft.netcore.app.runtime.win-x64\3.1.6\tools\crossgen.exe

注意:我知道我可以使用独立部署可执行文件的ReadyToRun功能(如此处所述),但是我需要优化类库,因此 ReadyToRun 不起作用。

问题

  1. Nuget包有一个很大的警告

内部实现包不适合直接使用。请不要直接引用。2.这样的安装似乎不正确。我希望 CrossGen 作为dotnet 工具安装,而不需要创建一个虚拟项目并运行dotnet restore以下载缓存中的 nuget 包的副本。

在 ci/cd 构建期间是否有正确的方法来预编译 .NET Core 5库?

c# compiler-optimization .net-core coreclr

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

Wpf 应用程序崩溃 - 错误模块名称 coreclr.dll 版本:4.700.20.47201

我在 .netcore 3.1 上有 WPF 应用程序,打包在 appx 包中并从包中安装。有时(几十次启动中的一次)它会在启动时崩溃,并在 EventViewer 中出现错误:

第一个错误条目:

Application: MyApp.exe
CoreCLR Version: 4.700.20.47201
.NET Core Version: 3.1.9
Description: The process was terminated due to an internal error in the .NET Runtime at IP 00007FFE0C06FF20 (00007FFE0C050000) with exit code 80131506.
Run Code Online (Sandbox Code Playgroud)

下一个错误条目:

Faulting application name: MyApp.exe, version: 1.0.0.0, time stamp: 0x5f6b3998
Faulting module name: coreclr.dll, version: 4.700.20.47201, time stamp: 0x5f6a7a28
Exception code: 0xc0000005
Fault offset: 0x000000000001ff20
Faulting process id: 0x5920
Faulting application start time: 0x01d6ca611262b108
Faulting application path: C:\Program …
Run Code Online (Sandbox Code Playgroud)

wpf .net-core coreclr

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

获取UAP10平台上已加载程序集的列表

在针对.NET Framework 4的"普通".NET程序集上,我可以使用AppDomain.CurrentDomain.GetAssemblies()获取所有已加载程序集的列表.

如何在Windows Universal App或CoreCLR应用程序上执行此操作?

c# win-universal-app coreclr

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

使用timestamp数据类型在SQL表中插入记录

我有一个带有TimeStamp列的SQL表.相应的EF实体如下

 public partial class Request : IEntityBase
{
    public Request()
    {            
    }

    public int RequestID { get; set; }
    public Nullable<int> BatchID { get; set; }
    public string ClientID { get; set; }
    public Nullable<System.DateTime> CreatedDateTime { get; set; }
    public Nullable<System.DateTime> ModifiedDateTime { get; set; }
    public byte[] VersionStamp { get; set; }        
}
Run Code Online (Sandbox Code Playgroud)

VersionStamp属性的数据类型timestamp为sql

在C#中我创建一个新实体并调用savechanges()

        var request = new Request()
        {
            ClientID = "XYZ",
            CreatedDateTime = DateTime.Now,
            ModifiedDateTime = DateTime.Now,
        };            
        await …
Run Code Online (Sandbox Code Playgroud)

entity-framework-core .net-core coreclr

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