c# - IIS session 在发布 Web 上丢失

标签 c# session visual-studio-2012 web iis-7.5

以前在 Visual Studio 2012 中使用我的 Web 项目时,只要我不对任何 .config 或 .cs 文件进行任何更改,我就可以点击“发布 Web”按钮,大部分时间我的 session 数据都会保留这样我就不必每次对 .css 或 .html 文件进行小的更改时都重新登录。

为了使用 w3wp.exe 进行调试而进行了一些设置之后,现在每次单击“发布 Web”时 session 数据都会丢失,即使我在发布之间完全没有进行任何更改也是如此。

我不知道我做了什么来改变它,但我真的需要能够对静态文件进行更改,而不必每次都登录。如何阻止 session 被终止?

最佳答案

这取决于您发布的内容。即使您没有在知情的情况下进行任何更改,应用程序域也会在以下情况下卸载:

  • web.config 被再次复制(内容无关紧要)
  • bin 文件夹已修改(同样,具有较新时间戳的相同 dll 被视为修改)

据我所知,Publish 总是更新 web.config。我不确定的一件事是,如果您没有任何转换(.debug.config 或 .release.config),它是否会更新 web.config

有几件事你可以尝试:

  • web.config 的构建操作设置为“无”。这样可以防止它被完全复制到输出。

  • 定义一个新的构建配置,例如“静态内容”。使用此构建配置,定义一个新的发布配置文件,比如“静态内容”。将这些行添加到您的 .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 个文件夹,这样您的应用程序域就不会卸载, session 也不会丢失。您仍然可以在需要时使用其他配置文件进行完整发布。

  • 在“发布”>“设置”>“文件发布选项”中,确保未选中“删除所有现有文件...”选项。

希望这些解决方法中的一种或全部能够解决您的问题。

更新:根据评论,这是一个简单的 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\fontscss\images),这将很有帮助。

  • Copy task 有几个您可能想要修改的其他属性(例如 ContinueOnErrorOverwriteReadOnlyFiles)。

  • 您还可以在目标路径中使用标准 VS 宏(例如 $(SolutionRoot)$(OutputDir) 等)。

关于c# - IIS session 在发布 Web 上丢失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25747991/

相关文章:

c - 运行可执行文件

c# - masonry 图像不喜欢 <div>

C#,在 Windows 上检测选定的文本?

c# - 无法为接受 Expression<Func> 的方法推断实际类型

java - Spring 中的请求和 session bean 生命周期

visual-studio-2012 - 我可以重新着色Visual Studio 11吗?

c# - gmail联系人的邮政地址解析

java - EJB Java : Better to use Session beans or message driven beans

php - session 数据的 file_get_contents(或 curl 或 fopen)问题

c# - Crystal 报表显示空白页