在单元测试时,我一直使用Moq来模拟外部依赖项.既然我正在尝试使我的代码完全跨平台,我想让我的单元测试也在linux上运行,所以我的目标是我的项目coreclr50.
问题是我似乎找不到任何可以让我在coreclr上模拟的模拟库.LightMock.vNext尝试这样做,但它需要手动创建模拟类,这是不方便的.
我想知道人们如何对他们的MVC 6控制器进行单元测试!
我有一个通过 Nuget 分发的库。在该包中,我有一个 .targets 文件,该文件包含在消费项目的 csproj 中(通过 nuget),以便 MSBuild 可以在构建期间执行任务(这有效地允许我将构建步骤注入到消费项目中。)该任务基本上调用包含在 nuget 包的“工具”文件夹中的可执行文件。
我想知道如何使用 .Net core 和新的 dotnet cli 来实现这个功能?
请参阅http://docs.nuget.org/Create/Creating-and-Publishing-a-Package 上的“将 MSBuild 目标和道具文件导入项目”部分
我正在使用一个 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) 当我使用经典的 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
所以可以说我已经登录了 User1 并且根据我设置的某些操作
\n\n `Session.SetInt32("key1", 123)`\nRun Code Online (Sandbox Code Playgroud)\n\n现在 User2 从其他机器登录并根据我设置的某些操作
\n\n `Session.SetInt32("key1", 999)`\nRun Code Online (Sandbox Code Playgroud)\n\n问题 1
\n这会覆盖 User1 的密钥吗?
另请注意这里说
\n\n\n\n\nASP.NET 附带了 IDistributedCache 的多个实现,\n 包括内存中选项(仅在开发和\n 测试期间使用)
\n
问题 2
\n我可以在生产中使用 IDistributedCache 的其他实现是什么?
在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的真实用途是什么?
我正在Visual Studio 2017中创建一个ASP .Net Core(2.0)MVC应用程序,它运行正常。
在昨天关闭计算机并今天返回我的应用程序之后,当我在未调试的情况下以chrome启动应用程序时,现在收到此浏览器错误。
运行dotnet在应用程序目录内运行,我可以访问该站点就好了。只是当我通过Visual Studio / IIS Express运行它时,出现此错误。
HTTP错误502.5-进程失败
该应用程序可以很好地构建和编译。我也清洗了溶液。
查看事件日志,我发现:
我正在尝试使用此处所述的Microsoft CrossGen 实用程序将 .NET Core 5库预编译/提前 (AOT) 编译为本机映像,以缩短启动时间。
然而,获取 CrossGen的说明很模糊:
如果使用 NuGet 包安装 CoreCLR,则可以在 NuGet 包的工具文件夹中找到 CrossGen。
如何通过 NuGet 安装 CrossGen?
创建一个写入deleteme.csproj磁盘并具有<PackageReference Include="Microsoft.NETCore.App.Runtime.win-x64" Version="3.1.6" />
跑步dotnet restore deleteme.csproj。这会将 Crossgen nuget 包下载到本地缓存。
我现在可以跑了~/.nuget/packages/microsoft.netcore.app.runtime.win-x64\3.1.6\tools\crossgen.exe
注意:我知道我可以使用独立部署可执行文件的ReadyToRun功能(如此处所述),但是我需要优化类库,因此 ReadyToRun 不起作用。
内部实现包不适合直接使用。请不要直接引用。2.这样的安装似乎不正确。我希望 CrossGen 作为dotnet 工具安装,而不需要创建一个虚拟项目并运行
dotnet restore以下载缓存中的 nuget 包的副本。
在 ci/cd 构建期间是否有正确的方法来预编译 .NET Core 5库?
我在 .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) 在针对.NET Framework 4的"普通".NET程序集上,我可以使用AppDomain.CurrentDomain.GetAssemblies()获取所有已加载程序集的列表.
如何在Windows Universal App或CoreCLR应用程序上执行此操作?
我有一个带有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) coreclr ×10
c# ×4
.net-core ×3
asp.net-core ×3
.net ×1
asp.net ×1
collections ×1
dnx ×1
iis-express ×1
mocking ×1
nuget ×1
version ×1
wpf ×1