msbuild / clickonce публиковать файлы, созданные во время сборки - PullRequest
4 голосов
/ 24 марта 2010

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

Здесь - сообщение в блоге о том, как включить элементы, которые не являются частью проекта. Однако, как кто-то упоминает в комментариях к этому посту, он не обновляет манифест развертывания, когда вы делаете это в задаче «BeforePublish», и файлы не загружаются - он работает нормально, если вы делаете это в «BeforeBuild». Задача хотя.

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

У кого-нибудь есть решение для этого?

(p.s. В настоящее время создание развертывания clickonce с использованием mage.exe не вариант, это нужно сделать с помощью цели публикации)

Ответы [ 4 ]

3 голосов
/ 25 марта 2010

Вы можете сделать что-то вроде этого:

<ItemGroup Condition="'$(Configuration)' == 'Release'">
    <Content Include="..\bin\Release\Reports\Report.srf" Condition="Exists('..\bin\Release\Reports\Reports.srf')">
      <Link>Reports\Reports.srf</Link>
      <Visible>false</Visible>
    </Content>
</ItemGroup>

Для этого потребуется запустить сборку и опубликовать в 2 этапа. То есть из чистого рабочая копия, msbuild /p:Configuration=Release /t:Publish не будет включать этот файл в развертывание, сначала нужно будет запустить msbuild /p:Configuration=Release, а затем msbuild /p:Configuration=Release /t:Publish, манифест будет обновляться во время публикации.

2 голосов
/ 25 марта 2010

Проверить это сообщение . Я почти уверен, что именно это я использовал при настройке нашего процесса развертывания здесь.

Нам нужно включить не .net dll в каталог bin, чтобы наше приложение работало, они уже собраны, поэтому у меня нет вашей проблемы «нужно сначала собрать». Однако я включаю 'include' как часть цели BeforePublish :

   <Target Name="BeforePublish" DependsOnTargets="IncludeAdditionalPublishFiles; 
        ReleaseModeUpdateConfig;
        ReleaseModeInsertDatabaseRecords " />

  <ItemGroup>
    <AdditionalPublishFile Include="..\..\..\..\..\SharedDependencies\Leadtools\Leadtools.Codecs.J2k.dll">
      <Visible>False</Visible>
    </AdditionalPublishFile>
  </ItemGroup>


<Target Name="IncludeAdditionalPublishFiles" Condition=" '$(Configuration)' == 'Release' And Exists('@(IntermediateAssembly)') " >
    <Touch Files="@(IntermediateAssembly)" />
    <CreateItem Include="@(AdditionalPublishFile)" AdditionalMetadata="TargetPath=%(FileName)%(Extension);IsDataFile=false">
      <Output TaskParameter="Include" ItemName="_DeploymentManifestFiles" />
    </CreateItem>
  </Target>

Как вы можете видеть, IncludeAdditionalPublishFiles выполняет работу над включением (проверьте сообщение в блоге на предмет «что, черт возьми, здесь происходит»), я также обновляю конфигурацию и устанавливаю некоторые значения в SQL Compact Db.

Требуется немного проб и ошибок, чтобы понять это правильно, но работает в конце. Обратите внимание, что вы можете добавить столько AdditionalPublishFile, сколько хотите.

1 голос
/ 24 марта 2010

Итак, вы хотите включить файлы, которые генерируются при сборке.

Я думаю, хотя вы сказали, что это не вариант, единственное решение - выполнить развертывание вручную через Mage или MageUI. Только так вы можете контролировать сборку и развертывание. Не можете ли вы создать командный файл для развертывания приложения? Вы можете выполнить командный файл в событии после сборки.

0 голосов
/ 25 марта 2010

Попробуйте: создайте свой проект. Затем перейдите в диалоговое окно «Файлы приложения» и нажмите «показать все файлы». Он показывает файлы, которые вы хотите включить? Если это так, отметьте их как include (обязательно). Он должен сохранить их и включить в развертывание.

RobinDotNet

...