首页 文章

Winform ClickOnce发布失败,app.config转换

提问于
浏览
1

我将app.config转换添加到使用ClickOnce发布的现有Windows窗体客户端应用程序,现在它不会发布 . 错误信息:

“obj \ Release \ Client.csproj.App.config; obj \ Release \ MyAppName.exe.config”是“GenerateApplicationManifest”任务的“ConfigFile”参数的无效值 . 无法将多个项目传递给“Microsoft.Build.Framework.ITaskItem”类型的参数

当我取消选中“启用ClickOnce安全设置”(项目属性>安全性)时,项目将在没有此错误的情况下从Visual Studio 2015构建和运行,但是当我尝试使用ClickOnce发布时,错误将返回 . 启用安全性会导致项目根本无法构建 . 无论哪种方式,错误都是一样的 .

app.config设置为“始终复制” .

我尝试删除clickonce证书并安装一个没有症状差异的新证书 .

请注意,这是一个Windows窗体应用程序,而不是Web应用程序 . 转换是使用Configuration Transform扩展创建的(与SlowCheetah的工作方式相同) . 我发现这个应用程序和成功的应用程序之间的设置有所不同 .

.csproj文件的这一部分似乎与此问题有关:

<UsingTask TaskName="TransformXml" AssemblyFile="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\Web\Microsoft.Web.Publishing.Tasks.dll" />
      <Target Name="AfterCompile" Condition="Exists('App.$(Configuration).config')">
        <!--Generate transformed app config in the intermediate directory-->
        <TransformXml Source="App.config" Destination="$(IntermediateOutputPath)$(TargetFileName).config" Transform="App.$(Configuration).config" />
        <!--Force build process to use the transformed configuration file from now on.-->
        <ItemGroup>
          <AppConfigWithTargetPath Remove="App.config" />
          <AppConfigWithTargetPath Include="$(IntermediateOutputPath)$(TargetFileName).config">
            <TargetPath>$(TargetFileName).config</TargetPath>
          </AppConfigWithTargetPath>
        </ItemGroup>
      </Target>

另一篇文章建议删除ItemGroup节点 . 当我这样做时,项目在VS中构建和运行,并且能够发布到测试位置,但app.config转换不会发生 .

2 回答

  • 0

    已解决:这些症状是由Microsoft.Bcl引起的,无法与config变换和ClickOnce一起发布 . 此应用程序是使用Bcl使用.NET 4创建的,以便在旧的XP计算机上运行时使用async / await模式 . 从那时起,我们的用户已升级到Windows 7和10,因此我能够将应用程序升级到.NET 4.5.2并删除Bcl软件包 . 随着Bcl的消失,问题彻底解决了 . (可能有某种黑客攻击让Bcl在配置转换和clickonce中正常工作,但由于我能够升级,所以不再追求它) .

  • 0

    如果接受的答案对你不起作用(就像它不适合我) . 请参阅此question的解决方案:

    我遇到了同样的问题 . 对我来说固定它的是从上面改变变换中的线

    <AppConfigWithTargetPath Remove="app.config" />
    

    <AppConfigWithTargetPath Remove="@(AppConfigWithTargetPath)" />
    

相关问题