最近我开始阅读有关.NET重组细节的信息(主要是通过.NET Core github页面).它接缝他们创建了兄弟项目以支持更多平台.在阅读时我的印象是CoreCLR和CoreRT是一个新的OpenSource版本的专有Roslyn编译器.CoreRT提供本机(AOT)编译.而LLILC是一种备选实现指挥LLVM框架.
任何人都可以从用户角度确认和描述这些项目的差异和目标吗?为什么有人会在未来使用Roslyn而不是CoreCLR?
我在.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
令人惊讶的是,当我调试代码时,我看到变量t有IsGenericType 属性,但我不能IsGenericType在代码中使用.不确定我需要添加的原因或名称空间.我已经加入using System和using System.Runtime两个命名空间
我正在尝试在我的coreclr项目中使用这个类,但我似乎找不到SHA256Managed的正确包.我曾尝试使用System.Security.Cryptography.Algorithms":"4.0.0-beta-23409"但它不包含SHA2565Managed的实现.在coreclr中是否还有其他计算哈希值的替代方法?
我在我的.Net核心应用程序中使用了一些不安全的代码.为此,我在project.json文件中进行了此更改
"compilationOptions": {
"allowUnsafe": true,
}
这个错误仍然存在 error CS0227: Unsafe code may only appear if compiling with /unsafe
我已经经历过这个了
我有一个针对.NET Framework的应用程序,现在我需要在.NET Core中开发一个库.我计划将两个项目放在同一个解决方案中,并在.NET Framework项目中添加.NET Core库作为参考.
可以这样做吗?如果答案是肯定的,那怎么办呢?
在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核心应用程序.当存在异常时(在非开发环境中),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) 我有ASP.NET核心Web应用程序.我已在Web服务器上配置Web应用程序并将ASPNETCORE_ENVIRONMENT变量设置为Development.我将此变量设置为机器级别,如下图所示.现在在同一台机器上,我想配置一个与Staging环境相同的Web应用程序实例.
我在这里设置ASPNETCORE_ENVIRONMENT应用程序级别而不是机器级别有什么选择?所以我可以在同一台机器上托管同一个应用程序的多个实例?
我在包管理器控制台中运行此命令以升级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) 我有一个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)
所以我真的需要接口吗?