更改分支后突然找不到System.Web.Http

时间:2019-03-27 10:01:53

标签: c#

我有一个运行了3年没有问题的MVC 5 Web应用程序。昨天我更改了分支,突然出现错误"Could not load file or assembly 'System.Web.Http', Version=4.0.0.0"。这发生在Entity Framework OnModelCreating中(尽管我确定EF不是问题)。

OnModelCreating:

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {

        var entitymethod = typeof(DbModelBuilder).GetMethod("Entity");


        foreach (var assembly in AppDomain.CurrentDomain.GetAssemblies())
        {
            try
            {
                var a = assembly.GetTypes();
            }
            catch(ReflectionTypeLoadException ex)
            {
                System.Text.StringBuilder sb = new System.Text.StringBuilder();
                foreach (Exception exSub in ex.LoaderExceptions)
                {
                    sb.AppendLine(exSub.Message);
                    System.IO.FileNotFoundException exFileNotFound = exSub as System.IO.FileNotFoundException;
                    if (exFileNotFound != null)
                    {
                        if (!string.IsNullOrEmpty(exFileNotFound.FusionLog))
                        {
                            sb.AppendLine("Fusion Log:");
                            sb.AppendLine(exFileNotFound.FusionLog);
                        }
                    }
                    sb.AppendLine();
                }
                string errorMessage = sb.ToString();
            }
            //find alle de klasser der arver fra Entity
            var entitytypes = assembly.GetTypes().Where(x => x.IsSubclassOf(typeof(Entity)));
            foreach (var type in entitytypes)
            {
                if(type.Name != "Field")
                //lav et DbSet af hver type
                entitymethod.MakeGenericMethod(type).Invoke(modelBuilder, new object[] { });
            }
        }

请注意,try catch用于调试此问题。 我可以看到foreach循环已到达的程序集是Microsoft.Practices.Unity.WebApi,因此我猜这是需要System.Web.Http的程序集。事实是,该Web应用程序正在针对不同客户的大约30种不同Web应用程序上运行,服务器和我的同事计算机都没有该程序集。

我尝试从Web应用程序复制程序集,该程序可以正常运行,但无效。

3 个答案:

答案 0 :(得分:0)

Property window 使用复制本地True Property,遇到相同的问题并解决

答案 1 :(得分:0)

您可以使用添加引用Add Reference 来添加System.Web.Http,然后确保

Copy Local True 请注意,您已经安装了同事计算机.NET,因此该DLL将从GAC文件夹中选取,以查看GAC enter link description here的更多详细信息

答案 2 :(得分:0)

GIT(假设您使用的是GIT)通常会忽略.dll文件和.exe文件。可能是System.Web.Http程序集的dll文件从未添加到GIT中,并且始终位于驱动器上。现在,您已经更改了分支,它已经签出了GIT上的所有内容,并删除了驱动器上的内容。

我确实在'Microsoft.AspNet.WebApi.Core'中找到了System.Web.Http程序集。要添加此代码:

  1. 右键单击“解决方案资源管理器”中的项目
  2. 管理NuGet软件包...
  3. 点击浏览
  4. 在搜索中输入“ Microsoft.AspNet.WebApi.Core”
  5. 安装“ Microsoft.AspNet.WebApi.Core”包

如果这很重要,则可能要从.gitignore中删除.dll;因为这种情况也发生在我身上,因为Visual Studio通常只将dll放入bin文件夹中。