标签: coreclr

.NET CoreCLR,CoreRT,Roslyn和LLILC之间有什么区别

最近我开始阅读有关.NET重组细节的信息(主要是通过.NET Core github页面).它接缝他们创建了兄弟项目以支持更多平台.在阅读时我的印象是CoreCLRCoreRT是一个新的OpenSource版本的专有Roslyn编译器.CoreRT提供本机(AOT)编译.而LLILC是一种备选实现指挥LLVM框架.

任何人都可以从用户角度确认和描述这些项目的差异和目标吗?为什么有人会在未来使用Roslyn而不是CoreCLR?

.net clr roslyn coreclr corert

25
推荐指数
1
解决办法
8805
查看次数

.Net Core中缺少IsGenericType和IsValueType?

我在.Net 4.6.2中有这个代码,现在尝试转换为.Net核心但是我收到了错误

错误CS1061'Type'不包含'IsGenericType'的定义,也没有扩展方法'IsGenericType'接受类型'Type'的第一个参数(你是否缺少using指令或汇编引用?)

public static class StringExtensions
{
    public static TDest ConvertStringTo<TDest>(this string src)
    {
        if (src == null)
        {
            return default(TDest);
        }           

        return ChangeType<TDest>(src);
    }

    private static T ChangeType<T>(string value)
    {
        var t = typeof(T);

        // getting error here at t.IsGenericType
        if (t.IsGenericType && t.GetGenericTypeDefinition().Equals(typeof(Nullable<>)))
        {
            if (value == null)
            {
                return default(T);
            }

            t = Nullable.GetUnderlyingType(t);
        }

        return (T)Convert.ChangeType(value, t);
    }
}
Run Code Online (Sandbox Code Playgroud)

什么相当于.Net Core?

UPDATE1

令人惊讶的是,当我调试代码时,我看到变量tIsGenericType 属性,但我不能IsGenericType在代码中使用.不确定我需要添加的原因或名称空间.我已经加入using Systemusing System.Runtime两个命名空间

在此输入图像描述

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

23
推荐指数
1
解决办法
4618
查看次数

CoreCLR中的哈希算法

我正在尝试在我的coreclr项目中使用这个,但我似乎找不到SHA256Managed的正确包.我曾尝试使用System.Security.Cryptography.Algorithms":"4.0.0-beta-23409"但它不包含SHA2565Managed的实现.在coreclr中是否还有其他计算哈希值的替代方法?

coreclr asp.net-core

20
推荐指数
1
解决办法
8688
查看次数

即使在project.json中将allowunsafe标志设置为true,也会在.Net Core中出现不安全的代码编译错误

我在我的.Net核心应用程序中使用了一些不安全的代码.为此,我在project.json文件中进行了此更改

"compilationOptions": { "allowUnsafe": true, }

这个错误仍然存​​在 error CS0227: Unsafe code may only appear if compiling with /unsafe

我已经经历过这个了

不安全的代码将无法在Visual Studio 2015上编译

如何从ASP.NET xproj调用不安全的代码

.net unsafe .net-core coreclr

19
推荐指数
2
解决办法
6335
查看次数

.Net Framework和.Net Core在同一解决方案中

我有一个针对.NET Framework的应用程序,现在我需要在.NET Core中开发一个库.我计划将两个项目放在同一个解决方案中,并在.NET Framework项目中添加.NET Core库作为参考.

可以这样做吗?如果答案是肯定的,那怎么办呢?

.net c# visual-studio .net-core coreclr

18
推荐指数
1
解决办法
6878
查看次数

ResponseCache属性不会在客户端缓存数据

在ASP.NET Core应用程序中,我有一个返回一些数据的action方法.我想在客户端缓存这些数据.所以根据这里文档,我可以使用ResponseCacheaction方法的属性.此属性Cache-Control在响应中添加标头

响应缓存是指在ASP.NET Core MVC操作所做的HTTP响应上指定与缓存相关的标头.这些标头指定了您希望客户端和中间(代理)计算机如何缓存对某些请求的响应(如果有的话).这可以减少客户端或代理对Web服务器的请求数,因为可以从客户端或代理的缓存提供对相同操作的未来请求.

响应缓存不会缓存Web服务器上的响应.它与输出缓存不同,后者会在早期版本的ASP.NET和ASP.NET MVC中缓存服务器内存中的响应.

所以这就是我的动作方法的样子

public class LookupController : Controller
{
    [HttpGet]
    [ResponseCache(Duration = 120)]
    public IEnumerable<StateProvinceLookupModel> GetStateProvinces()
    {
        return _domain.GetStateProvinces();
    }
}
Run Code Online (Sandbox Code Playgroud)

然后我使用浏览器调用方法http:// localhost:40004/lookup/getstateprovinces 这是请求和响应头

在此输入图像描述

请注意,响应标头Cache-Control: public,max-age-120符合预期.但是,如果使用F5刷新页面(120秒之前),则GetStateProvince操作方法中的调试器断点总是会命中.这意味着它不会破坏客户端的数据.

我还需要做些什么来启用客户端缓存吗?

更新 我尝试过使用IE,Chrome和POSTMAN但没有运气.每次我在地址栏中输入网址或点击刷新时,客户端(即浏览器或邮递员)都会调用操作方法.

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

17
推荐指数
3
解决办法
6320
查看次数

处理asp.net核心中的异常?

我有asp.net核心应用程序.当存在异常时(在非开发环境中),configure方法的实现将用户重定向到"Error"页面

但是,只有在控制器内发生异常时,它才有效.如果异常发生在控制器之外,例如在我的自定义中间件中,则用户不会被重定向到错误页面.

如果中间件中存在异常,如何将用户重定向到"错误"页面.

     public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
    {
        loggerFactory.AddConsole(Configuration.GetSection("Logging"));
        loggerFactory.AddDebug();

        app.UseApplicationInsightsRequestTelemetry();

        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
            app.UseBrowserLink();
        }
        else
        {
            app.UseExceptionHandler("/Home/Error");
        }

        app.UseApplicationInsightsExceptionTelemetry();

        app.UseStaticFiles();
        app.UseSession();
        app.UseMyMiddleware();

        app.UseMvc(routes =>
        {
            routes.MapRoute(
                name: "default",
                template: "{controller=Home}/{action=Index}/{id?}");
        });
    }
Run Code Online (Sandbox Code Playgroud)

更新1
我更新了上面的代码,其中包含初始帖子中缺少的以下两行.

        app.UseSession();
        app.UseMyMiddleware();
Run Code Online (Sandbox Code Playgroud)

另外我发现为什么app.UseExceptionHandler无法重定向到错误页面.
当我的中间件代码中有异常时,app.UseExceptionHandler("\Home\Error")重定向到\Home\Error预期; 但由于这是一个新请求,我的中间件再次执行并再次抛出异常.
所以为了解决这个问题,我改变了我的中间件只执行if context.Request.Path != "/Home/Error"

我不确定这是解决这个问题的正确方法,但是它的工作原理.

public class MyMiddleWare
{
    private readonly RequestDelegate _next;
    private readonly IDomainService _domainService;

    public MyMiddleWare(RequestDelegate next, IDomainService domain)
    {
        _next = next;
        _domainService …
Run Code Online (Sandbox Code Playgroud)

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

16
推荐指数
2
解决办法
2万
查看次数

如何在同一台机器上配置多个ASPNETCORE_ENVIRONMENT?

我有ASP.NET核心Web应用程序.我已在Web服务器上配置Web应用程序并将ASPNETCORE_ENVIRONMENT变量设置为Development.我将此变量设置为机器级别,如下图所示.现在在同一台机器上,我想配置一个与Staging环境相同的Web应用程序实例.

我在这里设置ASPNETCORE_ENVIRONMENT应用程序级别而不是机器级别有什么选择?所以我可以在同一台机器上托管同一个应用程序的多个实例?

在此输入图像描述

在此输入图像描述

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

16
推荐指数
1
解决办法
2905
查看次数

DNX beta8-15530:无法加载文件或程序集"Microsoft.DNX.PackageManager"

我在包管理器控制台中运行此命令以升级dnx.

"dnvm upgrade -u default"
Run Code Online (Sandbox Code Playgroud)

一旦它得到更新,我可以看到(C:\ Users\Chandrasekar.dnx\runtimes)新的运行时版本,如下所述

"dnx-clr-win-x86.1.0.0-beta8-15530"  
Run Code Online (Sandbox Code Playgroud)

我开始在VS2015中创建新项目 - > ASPNET 5 Web应用程序,它最终出现了一些错误.

在此输入图像描述

在输出窗口中,您可以看到错误"无法加载'Microsoft.DNX.PackageManager' ",根据此公告,它已被重命名为"Microsoft.Dnx.Tooling",所以我的问题是为什么新的DNX beta 8版本仍然依赖在这个删除或重命名的DLL'Microsoft.DNX.PackageManager '

输出窗口错误:

PATH=.\node_modules\.bin;C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\Extensions\Microsoft\Web Tools\External;%PATH%;C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\Extensions\Microsoft\Web Tools\External\git
C:\Users\Chandrasekar\.dnx\runtimes\dnx-clr-win-x86.1.0.0-beta8-15530\bin\dnx.exe "C:\Users\Chandrasekar\.dnx\runtimes\dnx-clr-win-x86.1.0.0-beta8-15530\bin\lib\Microsoft.DNX.PackageManager\Microsoft.DNX.PackageManager.dll" restore "C:\Users\Chandrasekar\Documents\Visual Studio 2015\Projects\DNX8\src\DNX8" -f "C:\Program Files (x86)\Microsoft Web Tools\DNU"
System.IO.FileNotFoundException: Could not load file or assembly 'Microsoft.DNX.PackageManager' or one of its dependencies. The system cannot find the file specified.
File name: 'Microsoft.DNX.PackageManager'
   at System.Reflection.RuntimeAssembly._nLoad(AssemblyName fileName, String codeBase, Evidence …
Run Code Online (Sandbox Code Playgroud)

visual-studio-2015 coreclr dnx dnvm asp.net-core

15
推荐指数
2
解决办法
6325
查看次数

我们需要依赖注入的接口吗?

我有一个ASP.NET核心应用程序.该应用程序有很少的辅助类可以完成一些工作.每个类都有不同的签名方法.我在网上看到很多.net核心示例,它们为每个类创建接口,然后使用DI框架注册类型.例如

 public interface IStorage
 {
    Task Download(string file);
 }

 public class Storage
 {
    public Task Download(string file)
    {
    }
 }

 public interface IOcr
 {
     Task Process();
 }

 public class Ocr:IOcr
 {
    public Task Process()
    {

    }
 }
Run Code Online (Sandbox Code Playgroud)

基本上每个接口只有一个类.然后我用DI注册这些类型

 services.AddScoped<IStorage, Storage>();
 services.AddScoped<IOcr,Ocr>();
Run Code Online (Sandbox Code Playgroud)

但是我可以在没有接口的情况下注册类型,这样接口看起来多余 例如

 services.AddScoped<Storage>();
 services.AddScoped<Ocr>();
Run Code Online (Sandbox Code Playgroud)

所以我真的需要接口吗?

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

15
推荐指数
2
解决办法
8859
查看次数