Web Deploy 发布snk文件

Web Deploy publishing snk file

我正在使用 Visual Studio 2017 开发和发布 ASP.NET Web 应用程序,使用针对 IIS 的 Web 部署。我的 Web 应用程序集已签名,因此我的项目在根文件夹中包含一个 .snk 文件。当我将 Web 应用程序部署到服务器时,.snk 文件也被发送过来。

我认为这不是一个好主意,因为 .snk 包含一个必须保持安全的私钥。我不喜欢将我的 .snk 文件的副本分散在各种 Web 服务器上的想法。据我了解,Visual Studio 应该在构建解决方案时使用此文件对我的程序集进行签名,而不是将其部署到服务器。

我说的对吗?如果是这样,我怎样才能阻止 Visual Studio 将此文件部署到服务器?

除非另有说明,否则 IIS 不会将 SNK 文件作为有效的 MIME 类型提供。当有人在浏览器中向文件键入 url 时,他们将收到 404。

如果您一开始不想将它发送到服务器,您也可以从 Visual Studio 资源管理器中将其删除,但仍将文件保留在文件夹中(注意 VS 也会删除该文件,所以你需要在 Windows Explorer 中再次手动将其复制到文件夹中)。

更简洁的解决方案是创建一个 wpp.targets 文件并指定要在发布中排除的 files/folders。

https://docs.microsoft.com/en-us/aspnet/web-forms/overview/deployment/advanced-enterprise-web-deployment/excluding-files-and-folders-from-deployment

在你的情况下,文件看起来像这样:MyProject.wpp.targets

<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <ItemGroup>
    <ExcludeFromPackageFiles Include="MyFile.snk">
      <FromTarget>MyProject.wpp.targets</FromTarget>
    </ExcludeFromPackageFiles>
  </ItemGroup>
</Project>

我在 Visual Studio 2019 年发布时遇到了类似的问题,但发现 SNK 文件已通过构建操作“内容”添加到 Web 项目中。

只需编辑 SNK 文件属性并将“构建操作”从“内容”更改为“None”即可阻止它在发布的文件夹中包含强名称密钥文件。