我有一个解决方案。第一个项目包含实体框架模型,输出类型是Console应用程序。其他项目是前端,asp.net mvc 5应用程序,具有来自第一个项目的实体的CRUD视图。从第二个项目引用的第一个项目,我还在web.config中添加了依赖程序集:
<dependentAssembly>
<assemblyIdentity name="VolLoader" publicKeyToken="null" />
</dependentAssembly>
但是当我访问使用此程序集中的实体的视图时,我收到视图编译错误:
Compiler Error Message: CS0246: The type or namespace name 'VolLoader' could not be found (are you missing a using directive or an assembly reference?)
Source Error:
Line 29:
Line 30:
Line 31: public class _Page_Views_JobMon_Index_cshtml : System.Web.Mvc.WebViewPage<IEnumerable<VolLoader.Data.JobToWatch>> {
Line 32:
Line 33: #line hidden
将namespace()添加到views文件夹中的web.config会导致每个视图出现编译错误。
将程序集复制到输出。
但是当我将第一个项目的输出类型更改为类库时,它可以工作,没有编译错误。我无法理解为什么?有没有人有想法?
答案 0 :(得分:4)
我想我发现了为什么会这样。我不是100%肯定,但我无法重新编译system.web.dll来证明这一点。 我在system.web.dll中找到了这段代码:
namespace System.Web.Compilation
{
/// <summary>Provides a container for building an assembly from one or more virtual paths within an ASP.NET project.</summary>
public class AssemblyBuilder
......
}
第381行:
internal CompilerParameters GetCompilerParameters()
{
CompilerParameters compilerParameters = this._compilerType.CompilerParameters;
string text = this._tempFiles.TempDir;
if (this.CultureName != null)
{
text = Path.Combine(text, this.CultureName);
Directory.CreateDirectory(text);
compilerParameters.OutputAssembly = Path.Combine(text, this.OutputAssemblyName + ".resources.dll");
}
else
{
compilerParameters.OutputAssembly = Path.Combine(text, this.OutputAssemblyName + ".dll");
}
如您所见,它只需要dll:
compilerParameters.OutputAssembly = Path.Combine(text, this.OutputAssemblyName + ".dll");
答案 1 :(得分:0)
很可能你的第一个项目不能构建为控制台应用程序(你有静态Main
方法吗?)因为第一个项目无法构建,所以第二个项目无法构建,因为缺少引用 - 即缺失第一个项目的装配。
为什么您希望EF模型包含在控制台应用程序中?