以前,使用Visual Studio 2012中的Web项目时,我可以单击“发布Web”按钮,并且只要我在大多数情况下都不会对会话数据保持任何状态下对任何.config或.cs文件进行任何更改,就可以每次对.css或.html文件进行小的更改时,都不必再次登录。
为了使w3wp.exe具有调试功能而弄乱了一些设置之后,即使我在发布之间绝对没有进行任何更改,每次单击Publish Web时,会话数据也会丢失。
我不知道该怎么做才能更改此设置,但确实需要能够对静态文件进行更改,而不必每次都登录。如何阻止会话被杀死?
这取决于您要发布的内容。即使您没有故意进行任何更改,在以下情况下,应用程序域也将卸载:
web.config
被再次复制(内容无关紧要)bin
文件夹已被修改(同样,具有新时间戳的相同dll被视为已修改)AFAIK,发布始终更新web.config
。我不确定的一件事是,web.config
如果您没有任何转换(.debug.config或.release.config),它是否会更新。
您可以尝试以下几种方法:
将web.config
的Build Action设置为“ None”。这样可以防止将其完全复制到输出中。
定义一个新的构建配置,说“静态内容”。使用此构建配置,定义一个新的发布配置文件,例如“静态内容”。将这些行添加到您的.csproj
文件
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
...
<OutputPath>bin\</OutputPath>
<NoWarn>42016,41999,42017,42018,42019,42032,42036,42020,42021,42022</NoWarn>
<ExcludeFilesFromDeployment>web.config</ExcludeFilesFromDeployment>
<ExcludeFoldersFromDeployment>bin</ExcludeFoldersFromDeployment>
</PropertyGroup>
这样可以防止这2个文件夹被部署,因此您的应用程序域将不会卸载,会话也不会丢失。而且,您仍然可以在需要时使用其他配置文件进行完整发布。
在发布>设置>文件发布选项中,确保未选中“删除所有现有文件...”选项。
希望这些解决方法之一或全部可以解决您的问题。
更新:根据评论,这是一个简单的AfterBuild
目标,该目标以递归方式将仅更改的文件复制到发布文件夹。只需将以下代码复制到您的.csproj
文件中,并适当调整路径。
<!-- define static content to be copied over -->
<ItemGroup>
<SourceFiles Include="CSS\**\*.css" />
<SourceFiles Include="Scripts\**\*.js" />
</ItemGroup>
<!-- The target that gets executed after build finishes and copies files recursively -->
<Target Name="AfterBuild">
<Copy
SourceFiles="@(SourceFiles)"
DestinationFolder="C:\Publish\YourApp\%(RecursiveDir)"
SkipUnchangedFiles="True"
/>
</Target>
现在,在构建时,您应该看到静态内容已发布到您的发布文件夹中。
笔记:
%(RecursiveDir)
递归复制文件,这有助于重建文件夹树。如果您嵌套了文件夹,例如css\fonts
和,则很有用css\images
。
Copy
任务还有其他一些属性(例如ContinueOnError
,OverwriteReadOnlyFiles
),您可能需要修改。
您还可以在目标路径中使用标准的VS宏(例如$(SolutionRoot)
,$(OutputDir)
等)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句