Web 配置转换失败

Web config transformation fails

提问人:Bojan Nedeljkovic 提问时间:11/15/2023 最后编辑:Bojan Nedeljkovic 更新时间:11/15/2023 访问量:29

问:

我们有一个 Web 项目 asp.net 我们正在将其迁移到具有集中式 nuget 包管理的 .NET SDK 样式项目。

我们正在使用的模板是,我们有一个 Web.Config 文件,其中包含三个转换(调试、发布、测试)。“生成操作”设置为“内容”,并将“复制到输出目录”设置为“无”。<Project Sdk="MSBuild.SDK.SystemWeb/4.0.88">

VS build 工作正常,但是当我们尝试发布版本时,我们会收到以下消息:

PreTransformWebConfig:
  Found The following for Config tranformation:
  Web.config, Web.config
  Skip copying Web.config to ...\Release\TransformWebConfig\original\W
  eb.config, File ...\Release\TransformWebConfig\original\Web.config i
  s up to date

构建失败,并显示:

Transforming Source File: ...\Web.config;Web.config
C:\Program Files\Microsoft Visual Studio\2022\Professional\MSBuild\Microsoft\VisualStudio\v17.0\Web\Microsoft.Web.Publi
shing.targets(1552,5): error : Could not open Source file: Could not find file '...\Web.config;Web.config'. [...Web.API.csproj]

构建命令:

msbuild /p:configuration=release /p:DeployOnBuild=true /p:DebugType=None /p:SkipInvalidConfigurations=true /p:WarningLevel=0 

如何解决此问题?这是一个 .net 框架项目,能够转换 web.config 对我们来说非常重要。

asp.net .NET msbuild web.config-transform

评论

0赞 Albert D. Kallal 11/16/2023
从 VS 发布时,发布配置是否有效?(在 VS 中,仅支持调试和发布配置,并且仅在使用 VS 发布选项期间支持。那么,从 VS 发布有效吗?(设置发布到本地文件夹 - 这是测试此操作的最简单方法,因为这样你就可以在该本地文件夹中检查/测试/查看/检查生成到该测试发布文件夹中的最终 web.config。那么,从 VS 发布到文件夹是否有效?(如果没有,那么可以肯定的是,您的命令行使用构建将不起作用)。
0赞 Bojan Nedeljkovic 11/16/2023
VS publish 也不起作用......它成功,但输出目录为空。我尝试了调试和发布配置。不幸的是,没有错误,我得到的只是: 构建已开始... ========== 构建:0 次成功,0 次失败,17 次最新,0 次跳过 ============ ========== 构建于上午 9:51 开始,耗时 00.154 秒 ========== ============ 发布:0 次成功,0 次失败,0 次跳过 ============== ========== 发布于上午 9:51 开始,耗时 00.154 秒 ==========
0赞 Bojan Nedeljkovic 11/16/2023
发布问题似乎源于我正在使用的模板:github.com/CZEMacLeod/MSBuild.SDK.SystemWeb,我下载了源文件,示例应用程序也无法发布到文件夹。然后我找到了这个线程:github.com/CZEMacLeod/MSBuild.SDK.SystemWeb/issues/21

答:

1赞 Jens Schmidt 11/30/2023 #1

当项目迁移到 SDK 样式时,会发生这种情况,同时保留显式内容项。

修复:添加或删除显式项。<EnableWebFormsDefaultItems>false</EnableWebFormsDefaultItems>

原答案抄自:https://github.com/CZEMacLeod/MSBuild.SDK.SystemWeb/issues/60

0赞 Bojan Nedeljkovic 12/8/2023 #2

最后,我们遇到了CSPROJ文件本身的一些混乱......对我们有用的是:

<ItemGroup>
    <None Include="Web.Debug.config">
      <IsTransformFile>true</IsTransformFile>
      <DependentUpon>Web.config</DependentUpon>
      <CopyToOutputDirectory>Never</CopyToOutputDirectory>
    </None>
    <None Include="Web.Release.config">
      <IsTransformFile>true</IsTransformFile>
      <DependentUpon>Web.config</DependentUpon>
      <CopyToOutputDirectory>Never</CopyToOutputDirectory>
    </None>
    <None Include="Web.Test.config">
      <IsTransformFile>true</IsTransformFile>
      <DependentUpon>Web.config</DependentUpon>
      <CopyToOutputDirectory>Never</CopyToOutputDirectory>
    </None>
</ItemGroup>
 .....
<ItemGroup>    
    <Content Update="Web.config">
        <CopyToOutputDirectory>Never</CopyToOutputDirectory>
        <TransformOnBuild>true</TransformOnBuild>
    </Content>
    <Content Update="Web.Debug.config">
        <IsTransformFile>true</IsTransformFile>
        <DependentUpon>Web.config</DependentUpon>
        <CopyToOutputDirectory>Never</CopyToOutputDirectory>
    </Content>
    <Content Update="Web.Release.config">
        <IsTransformFile>true</IsTransformFile>
        <DependentUpon>Web.config</DependentUpon>
        <CopyToOutputDirectory>Never</CopyToOutputDirectory>
    </Content>
</ItemGroup>