Почему ClickOnce в Visual Studio не развертывает файлы содержимого из зависимых сборок?

У меня есть интеллектуальное клиентское приложение, которое развертывается через клик один раз. Проблема в том, что у меня есть файлы содержимого в зависимых сборках, которые просто не отображаются в диалоговом окне опубликованных файлов приложений в visual studio.

Это означает, что каждый раз, когда я развертываю, я должен скопировать все файлы содержимого из выходного каталога сборки приложения в опубликованный каталог и перестроить манифесты, которые являются настоящей болью.

Почему эти файлы не видны издателю в visual studio?

Ответ 1

Кажется, я нашел эволюцию ответа от @John Hunter, который намного проще, добавьте это в csproj.

<ItemGroup>
    <Content Include="Bin\**\*.rpt" />
</ItemGroup>

После этого визуальная студия автоматически просмотрит все *.rpt файлы в этой папке как часть решения. Вы можете пойти с *.*, чтобы накапливать все. Это имеет смысл, если у вас есть папка с контейнером, например bin\MyDeployables\**\*.*

Мы следовали аналогичному использованию для использования Cassette MSBuild для объединения и минимизации нашего JS во время публикации и публикации опубликованных файлов с помощью встроенного инструментария публикации VS.

Ответ 2

Я думаю, что мой ответ от этого сообщения отвечает на ваш вопрос.

Резюме
Либо...
Добавьте свои файлы контента в свой проект, используя функцию "Добавить как ссылку".
Или...
Создайте событие post-build для копирования ваших файлов содержимого в основную папку вывода.

Ответ 3

Хорошо, я до сих пор не знаю, почему Visual Studio не может отображать ссылки на файлы с его публикацией ui, но я нашел работу, чтобы заставить публикацию включать эти файлы.

Как было предложено эта статья MSDN, поместите это в файл проекта.

<ItemGroup>
<AdditionalPublishFile Include="$(OutputPath)\**\*.rpt">
  <Visible>False</Visible>
</AdditionalPublishFile>
</ItemGroup>
<Target Name="BeforePublish">
  <Touch Files="@(IntermediateAssembly)" />
  <CreateItem Include="@(AdditionalPublishFile)" AdditionalMetadata="TargetPath=%(RecursiveDir)%(Filename)%(extension);IsDataFile=false">
    <Output TaskParameter="Include" ItemName="_DeploymentManifestFiles" />
  </CreateItem>
</Target>

Обратите внимание, что в некоторых случаях может потребоваться перезапуск Visual Studio (а не только перезагрузка проекта), чтобы эти изменения вступили в силу.

Ответ 4

Я предполагаю, что это решение было основано на: http://blogs.msdn.com/mwade/archive/2008/06/29/how-to-publish-files-which-are-not-in-the-project.aspx

В соответствии с моим последним комментарием к сообщению:

В какой момент мы должны ожидать для отображения в "файлах приложений", списки (если вообще)?

Или можно с уверенностью предположить, что они окажутся в список развернутых файлов данных?

В моем случае я надеюсь использовать:

False

Чтобы включить все файлы содержимого из зависимые сборки, которые находятся внутри подпапка "Ресурсы" сборки каталог.

Андрей.