【发布时间】:2017-11-19 11:24:06
【问题描述】:
我将 app.config 转换添加到使用 ClickOnce 发布的现有 Windows 窗体客户端应用程序,现在它不会发布。错误信息:
"obj\Release\Client.csproj.App.config;obj\Release\MyAppName.exe.config" 是“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 转换不会发生。
【问题讨论】:
-
更新:为了及时发布,我暂时删除了转换以支持基本的 app.config。我仍然希望解决原始问题并使用转换。
标签: winforms clickonce app-config publishing config-transformation