如何在单元测试项目中编译razor视图
我试图在单元测试项目中使用。然而,当我调用它时,我得到了与razor编译相关的错误: 缺少一个或多个编译引用。确保您的项目正在引用“Microsoft.NET.Sdk.Web”,并且“PreserveComilationContext”属性未设置为false .cshtml文件作为嵌入式资源和单元测试项目引用包含在测试项目中。所有这些文件在我运行web项目时有效,但在我从单元测试项目调用它时无效:如何在单元测试项目中编译razor视图,razor,asp.net-core,.net-core,mstest,Razor,Asp.net Core,.net Core,Mstest,我试图在单元测试项目中使用。然而,当我调用它时,我得到了与razor编译相关的错误: 缺少一个或多个编译引用。确保您的项目正在引用“Microsoft.NET.Sdk.Web”,并且“PreserveComilationContext”属性未设置为false .cshtml文件作为嵌入式资源和单元测试项目引用包含在测试项目中。所有这些文件在我运行web项目时有效,但在我从单元测试项目调用它时无效: var sp = ConfigureServices(); sp.GetService<Ra
var sp = ConfigureServices();
sp.GetService<RazorViewToStringRenderer>();
void ConfigureServices()
{
var services = new ServiceCollection();
var applicationEnvironment = PlatformServices.Default.Application;
services.AddSingleton(applicationEnvironment);
services.AddSingleton<IHostingEnvironment>(new HostingEnvironment
{
WebRootFileProvider = new PhysicalFileProvider(applicationEnvironment.ApplicationBasePath),
ApplicationName = Path.GetFileName(applicationEnvironment.ApplicationBasePath)
});
var diagnosticSource = new DiagnosticListener("Microsoft.AspNetCore");
services.AddSingleton<DiagnosticSource>(diagnosticSource);
services.AddSingleton<ObjectPoolProvider, DefaultObjectPoolProvider>();
services.AddLogging();
var embeddedProvider = new EmbeddedFileProvider(typeof(Startup).Assembly); //needed for mailtemplates
var compositeProvider = new CompositeFileProvider(embeddedProvider);
services.AddSingleton(compositeProvider);
services.AddMvc().AddRazorOptions(options => options.FileProviders.Add(compositeProvider));
services.AddTransient<RazorViewToStringRenderer>();
return services.BuildServiceProvider();
}
var sp=ConfigureServices();
sp.GetService();
void ConfigureServices()
{
var services=newservicecolection();
var applicationEnvironment=PlatformServices.Default.Application;
AddSingleton(applicationEnvironment);
services.AddSingleton(新主机环境)
{
WebRootFileProvider=新的物理文件提供程序(applicationEnvironment.ApplicationBasePath),
ApplicationName=Path.GetFileName(applicationEnvironment.ApplicationBasePath)
});
var diagnosticSource=new diagnosticslistener(“Microsoft.AspNetCore”);
服务。AddSingleton(诊断源);
services.AddSingleton();
services.AddLogging();
var embeddedProvider=new EmbeddedFileProvider(typeof(Startup).Assembly);//邮件模板需要
var compositeProvider=新的CompositeFileProvider(embeddedProvider);
服务。AddSingleton(compositeProvider);
services.AddMvc().AddRazorOptions(options=>options.FileProviders.Add(compositeProvider));
services.AddTransient();
return services.BuildServiceProvider();
}
{Microsoft.AspNetCore.Mvc.Razor.Compilation.CompilationFailedException:
发生一个或多个编译失败:lfrn3mzv.yfv(4,62):错误
CS0012:类型“Attribute”是在未定义的程序集中定义的
引用。必须添加对程序集“netstandard”的引用,
版本=2.0.0.0,区域性=中性,PublicKeyToken=CC7B13FFCD2DD51'。
lfrn3mzv.yfv(4,81):错误CS0518:预定义类型“System.String”为
未定义或导入lfrn3mzv.yfv(4145):错误CS0518:预定义
未定义或导入lfrn3mzv.yfv(4,11)类型“System.type”:
lfrn3mzv.yfv(11,11):错误
CS0246:找不到类型或命名空间名称“System”(是
是否缺少using指令或程序集引用?)
lfrn3mzv.yfv(14,36):错误CS0234:类型或命名空间名称
命名空间中不存在“ViewFeatures”
“Microsoft.AspNetCore.Mvc”(是否缺少程序集引用?)
lfrn3mzv.yfv(20129):错误CS0246:类型或命名空间名称“TACS”
找不到(是否缺少using指令或程序集
参考?)lfrn3mzv.yfv(20,80):错误CS0012:类型“Object”为
在未引用的程序集中定义。必须添加
引用程序集的netstandard,版本=2.0.0.0,区域性=neutral,
PublicKeyToken=CC7B13FFCD2DD51'.lfrn3mzv.yfv(23,67):错误CS1983:
异步方法的返回类型必须为void、Task或Task
lfrn3mzv.yfv(23,39):错误CS0400:类型或命名空间名称“System”
在全局命名空间中找不到(是否缺少
“\u AppCode\u Mail\u Notifications\u SponsorReview\u SFNegative\u cshtml.ExecuteAsync()”:
并非所有代码路径都返回值lfrn3mzv.yfv(20,18):错误CS0518:
未定义或导入预定义类型“System.Void”
/AppCode/Mail/Notifications/_ViewImports.cshtml(1,7):错误CS0246:
找不到类型或命名空间名称“TACS”(是否缺少
使用指令或组件引用?)
/AppCode/Mail/Notifications/SponsorReview/SFNegative.cshtml(4,92):
错误CS0012:类型“Object”是在未定义的程序集中定义的
引用。必须添加对程序集“netstandard”的引用,
版本=2.0.0.0,区域性=中性,PublicKeyToken=CC7B13FFCD2DD51'。
/AppCode/Mail/Notifications/SponsorReview/SFNegative.cshtml(4,92):
错误CS0518:未定义预定义类型“System.Object”,或
进口的
/AppCode/Mail/Notifications/SponsorReview/SFNegative.cshtml(4,92):
错误CS0518:未定义或导入预定义类型“System.Void”
/AppCode/Mail/Notifications/SponsorReview/SFNegative.cshtml(6,38):
错误CS0012:类型“Object”是在未定义的程序集中定义的
引用。必须添加对程序集“netstandard”的引用,
版本=2.0.0.0,区域性=中性,PublicKeyToken=CC7B13FFCD2DD51'。
/AppCode/Mail/Notifications/SponsorReview/SFNegative.cshtml(6,38):
错误CS0518:未定义预定义类型“System.Object”,或
进口的
/AppCode/Mail/Notifications/SponsorReview/SFNegative.cshtml(6,38):
错误CS0518:未定义或导入预定义类型“System.Void”
在
Microsoft.AspNetCore.Mvc.Razor.Internal.RazorViewCompiler.CompileAndimit(RazorCodeDocument
代码文档,字符串生成代码)位于
Microsoft.AspNetCore.Mvc.Razor.Internal.RazorViewCompiler.CompileAndimit(字符串
相对路径)在
Microsoft.AspNetCore.Mvc.Razor.Internal.RazorViewCompiler.CreateCacheEntry(字符串
标准化路径(0)
---来自引发异常的上一个位置的堆栈结束跟踪---在
System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()位于
System.Runtime.CompilerServices.TaskWaiter.HandleNonSuccessAndDebuggerNotification(任务
任务)在System.Runtime.CompilerServices.TaskAwaiter1.GetResult()中
在
Microsoft.AspNetCore.Mvc.Razor.Internal.DefaultRazorPageFactoryProvider.CreateFactory(字符串
相对路径)在
Microsoft.AspNetCore.Mvc.Razor.RazorViewEngine.CreateCacheResult(HashSet
1
expirationTokens、字符串相对路径、布尔值isMainPage)位于
Microsoft.AspNetCore.Mvc.Razor.RazorViewEngine.LocatePageFromPath(字符串
executingFilePath、字符串pagePath、布尔值isMainPage)位于
Microsoft.AspNetCore.Mvc.Razor.RazorViewEngine.GetView(字符串
executingFilePath、字符串viewPath、布尔值isMainPage)位于
TACS.Web.AppCode.Mail.ViewRenderServ
<system.web.webPages.razor>
<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<pages pageBaseType="System.Web.Mvc.WebViewPage">
<namespaces>
<add namespace="System.Web.Mvc" />
<add namespace="System.Web.Mvc.Html" />
<add namespace="System.Web.Routing" />
<add namespace="A line each for all my other namespaces ..." />
<add namespace="A line each for all my other namespaces ..." />
<add namespace="A line each for all my other namespaces ..." />
</namespaces>
</pages>
</system.web.webPages.razor>
@import Microsoft.NET.Sdk.Web
@import ....