Почему 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
Чтобы включить все файлы содержимого из зависимые сборки, которые находятся внутри подпапка "Ресурсы" сборки каталог.
Андрей.