我为RC2版本启动了一个新的MVC Web应用程序项目,并且我尝试添加一个类库作为项目引用。
我在项目中添加了一个简单的类库并引用它,并在project.json文件中得到以下内容:
"frameworks": {
"net452": {
"dependencies": {
"MyClassLibrary": {
"target": "project"
}
}
}
},
我可以在任何控制器和Startup.cs文件中使用此库而没有任何问题,但是当我尝试使用Razor页面中的库时,我在运行时收到以下错误:
名称' MyClassLibrary'在当前上下文中不存在 Output.WriteLine(MyClassLibrary.MyStaticClass.SomeStaticString);
这很奇怪,因为我在编辑Razor页面时得到了类库的智能感知,但是找不到任何说明你无法使用的内容项目参考来自这里。
我认为使用" wrap文件夹"在RC1下运行是很困难的。在类库项目中,但这让我很难过。
答案 0 :(得分:13)
在问题页面上发布了一个解决方法(对pranavkm和patrikwlund的信心) https://github.com/aspnet/Razor/issues/755
显然你需要使用RazorViewEngineOptions.CompilationCallback显式添加对Razor编译的引用。
将以下内容添加到Startup类的ConfigureServices方法中:
Ctl
LOAD DATA
INFILE *
INTO TABLE table1
APPEND
FIELDS TERMINATED BY ';'
(book ,
phone ,
pencil)
)
答案 1 :(得分:5)
我必须过滤掉动态程序集以避免此运行时异常: 动态程序集中不支持调用的成员。
这对我有用:
var myAssemblies = AppDomain.CurrentDomain.GetAssemblies()
.Where(x => !x.IsDynamic)
.Select(x => Microsoft.CodeAnalysis.MetadataReference.CreateFromFile(x.Location))
.ToList();
services.Configure((Microsoft.AspNetCore.Mvc.Razor.RazorViewEngineOptions options) => {
var previous = options.CompilationCallback;
options.CompilationCallback = (context) => {
previous?.Invoke(context);
context.Compilation = context.Compilation.AddReferences(myAssemblies);
};
});