C# Visual Studio 2013.2 can';无法生成,因为IIS正在锁定程序集
我的ASP.NET MVC 5应用程序正在使用我的本地IIS(Windows 7),在我不得不开始使用Microsoft.SqlServer.Types NuGet软件包之前,它工作得非常好。由于包具有本机程序集,因此必须在运行时加载这些程序集 但是,我遇到的问题是,在我重建应用程序并通过浏览器访问它之后,IIS将加载并锁定本机程序集。如果我进行更改并再次重建,VisualStudio将失败,并表示程序集已被另一个进程IIS锁定。我发现唯一的解决办法是在构建之前不断重新启动IIS,这是不现实的,因为根据我所做的更改数量,我可能一天要重建数百或数千次 有更合适的工作吗?比如告诉VisualStudio不要为本机程序集而烦恼?我们将不胜感激 下面是我加载程序集的方式:C# Visual Studio 2013.2 can';无法生成,因为IIS正在锁定程序集,c#,asp.net,visual-studio,iis,visual-studio-2013,C#,Asp.net,Visual Studio,Iis,Visual Studio 2013,我的ASP.NET MVC 5应用程序正在使用我的本地IIS(Windows 7),在我不得不开始使用Microsoft.SqlServer.Types NuGet软件包之前,它工作得非常好。由于包具有本机程序集,因此必须在运行时加载这些程序集 但是,我遇到的问题是,在我重建应用程序并通过浏览器访问它之后,IIS将加载并锁定本机程序集。如果我进行更改并再次重建,VisualStudio将失败,并表示程序集已被另一个进程IIS锁定。我发现唯一的解决办法是在构建之前不断重新启动IIS,这是不现实的,
[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"));
}
}
}
根据评论-我的建议是在解决方案的预构建配置步骤下放置一个
iis\u reset
命令:
不必重新启动整个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"
在预构建配置中放置一个
iis\u reset
命令。尽管整个情况很糟糕。。无论你做什么,你的调试能力都会停止-重置IIS/应用程序池会导致调试会话的初始加载时间急剧上升。这正是我所需要的,谢谢!我将不得不忍受IIS不断地重新加载,但这很好,因为在我之前每次重建都是这样做的,这是一天中的很多次。发布一个答案,这样我就可以给你评分了。作为答案添加:)是的,我在预构建中添加了iisreset/stop
,在后构建中添加了iisreset/start
。我建议只在预构建事件中回收你的应用程序池,使用以下命令:appcmd recycle-apppool/apppool.name:MyApplicationPool