当引用的程序集构建为控制台应用程序时,MVC查看get的编译错误(CS0246)。当它构建为类库时 - 它工作正常

时间:2014-02-07 00:09:37

标签: c# asp.net-mvc razor asp.net-mvc-5.1

我有一个解决方案。第一个项目包含实体框架模型,输出类型是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会导致每个视图出现编译错误。

将程序集复制到输出。

但是当我将第一个项目的输出类型更改为类库时,它可以工作,没有编译错误。我无法理解为什么?有没有人有想法?

2 个答案:

答案 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模型包含在控制台应用程序中?