Visual Studio 2013.2无法构建,因为IIS正在锁定程序集

时间:2014-05-18 22:37:54

标签: c# asp.net visual-studio iis visual-studio-2013

我的ASP.NET MVC 5应用程序正在使用我的本地IIS(Windows 7),该工作非常有效,直到我不得不开始使用Microsoft.SqlServer.Types NuGet包。因为包具有本机程序集,所以它们必须在运行时进行专业加载。

我遇到的问题是,在我重建应用程序并通过浏览器访问它后,IIS加载并锁定本机程序集。如果我进行更改并再次重建,Visual Studio将失败,并说组件被另一个进程IIS锁定。我发现的唯一工作是在构建之前继续重新启动IIS,这是不切实际的,因为我可能需要在一天内重建数百或数千次,具体取决于我做了多少更改。

有更合适的工作吗?就像告诉Visual Studio不要打扰原生程序集一样?帮助将不胜感激。

以下是我加载程序集的方法:

[assembly: WebActivatorEx.PreApplicationStartMethod(typeof(X.Mvc.App_Start.SqlServerTypesConfiguration), "LoadAssemblies")]

namespace X.Mvc.App_Start {
    public static class SqlServerTypesConfiguration {
        public static void LoadAssemblies() {
            SqlServerTypes.Utilities.LoadNativeAssemblies(System.Web.Hosting.HostingEnvironment.MapPath("~/bin"));
        }
    }
}

2 个答案:

答案 0 :(得分:0)

根据评论 - 我的建议是在解决方案的预构建配置步骤下放置一个iis_reset命令:

Pre-build

答案 1 :(得分:0)

无需重新启动整个 IIS,而是可以单独重新启动特定的应用程序池。我在构建后事件中使用以下脚本。

%SYSTEMROOT%\System32\inetsrv\appcmd stop apppool /apppool.name:"YOUR_APPPLICATION_POOL_NAME"
xcopy   "$(OutDir)*"  "C:\inetpub\wwwroot\myapp\" /Y /S
%SYSTEMROOT%\System32\inetsrv\appcmd start apppool /apppool.name:"YOUR_APPPLICATION_POOL_NAME"

enter image description here