当源文件位于包含ClickOnce with WPF app

时间:2017-09-12 07:54:06

标签: wpf clickonce

我在StackOverflow和其他地方发现了很多文章,说明如果你想使用ClickOnce将文件输出到bin文件夹,你应该设置

BuildActionContent

CopyToOuputDirectoryCopy if newer

但是我的一些二进制文件位于项目根目录中的Dependencies子文件夹中,当我发布内容时,它们会被输出到

<wpf app folder>\dependencies而不是<wpf app folder>导致我的应用无法正常运行。

有关如何更改此内容以强制ClickOnce将特定文件输出到<wpf app folder>\的任何建议,无论Source files位于何处。

1 个答案:

答案 0 :(得分:0)

我最终找到了一个我不喜欢的解决方法,但我需要继续前进。为了解决这个问题,我将所需的库作为链接添加到项目的根目录中,并将BuildAction设置为Content,将CopyToOutputDirectory设置为Copy if newer

我以为我用一个例子解释它,因为它可能会更有意义。

项目路径:C:\ Work \ MyApp,它包含以下子文件夹:

d:\工作\ MyApp的\ MyApp.csproj d:\工作\ MyApp的\ MyApp.xaml ... d:\工作\ MyApp的\斌\调试 d:\工作\ MyApp的\ BIN \发布 d:\工作\ MyApp的\ BIN \发布\ MyApp.exe的 d:\工作\ MyApp的\ Depedencies \ LibA.dll d:\工作\ MyApp的\ Depedencies \ LibB.dll 等...

这些库是第三方工具,实际上包含在它们自己的文件夹中:

d:\工具\ MyThirdPartyLib \ Distributation \ LibA.dll d:\工具\ MyThirdPartyLib \ Distributation \ LibB.dll

通过让D:\ Work \ MyApp \ Dependencies中的库无效,ClickOnce会将应用程序安装在:

C:\ Users \\ AppData \ Local \ Apps \ 2.0 ... \ MyApp.exe

并安装了位于Dependencies子文件夹中的文件:

C:\用户\\应用程序数据\本地\应用\ 2.0 ... \依赖性\ LibA.dll C:\用户\\应用程序数据\本地\应用\ 2.0 ... \依赖性\ LibB.dll

这导致我的应用无法正常工作。

为了解决这个问题,我最终将LibA.dll和LibB.dll添加到我的项目的根目录中作为&#34;链接文件&#34;并设置他们的BuildActionCopyToOutputDirectory,但不要将链接的文件指向

d:\工作\ MyApp的\ Depedencies \ LibA.dll d:\工作\ MyApp的\ Depedencies \ LibB.dll

而是指着他们:

d:\工具\ MyThirdPartyLib \ Distributation \ LibA.dll d:\工具\ MyThirdPartyLib \ Distributation \ LibB.dll

这似乎已经成功了。我唯一关注的是,现在我在视觉工作室的项目根目录中列出了10个奇怪的文件,我不喜欢这样:

MyApp Solution
    - MyApp Project
        - MyApp.csproj
        - MyApp.xaml
        - ...
        - LibA.dll
        - LibB.dll
        - ...

但现在必须这样做。

希望它能帮助别人!