Как эмулировать публикацию Visual Studios в конвейере Azure - PullRequest
1 голос
/ 29 октября 2019

Я пытаюсь выяснить, как опубликовать мое приложение WPF в нескольких местах.

Причина: нет каталога / сетевого расположения, к которому имеют доступ все пользователи. Локально размещенный агент, подключенный к лазурному конвейеру, имеет доступ к местоположениям (желаемым местоположениям публикации), которые позволят всем пользователям иметь хотя бы одно местоположение для доступа к приложению.

Через некоторое время я наконец смог опубликовать в этих местах. Теперь я хотел бы преобразовать свое действие публикации, чтобы имитировать то, что делает Visual Studio.

Под этим я подразумеваю то, что я хотел бы, чтобы папка публикации выглядела следующим образом:

1. A folder called "Application Files" 
     Containing subfolders 
         MyApplicationName_1_0_0_19
         MyApplicationName_1_0_0_20
         ...
2. `MyApplicationName.application` 
3. `Setup.exe` <- Note: I delete this file since it requires admin privileges to use. I've only included it here because Visual Studios Publish feature creates it on the first publish.

, а не то, как она выглядит в данный момент, и является всеми файлами моего приложения для текущей публикации.

Причина: запуск MyApplicationName.application создает ярлык на рабочем столе пользователя и при запуске приложения проверяет наличие более новой версии.

Последнее задание - публикация в нужном месте.

# ASP.NET Core (.NET Framework)
# Build and test ASP.NET Core projects targeting the full .NET Framework.
# Add steps that publish symbols, save build artifacts, and more:
# https://docs.microsoft.com/azure/devops/pipelines/languages/dotnet-core

trigger:
- master

pool: Default

variables:
  solution: '**/*.sln'
  buildPlatform: 'Any CPU'
  buildConfiguration: 'Release'

steps:
- task: NuGetToolInstaller@1

- task: NuGetCommand@2
  inputs:
    restoreSolution: '$(solution)'

- task: MSBuild@1
  inputs:
    solution: 'Tenant Tool Analytics Module/*.csproj'
    msbuildArchitecture: 'x64'


- task: VisualStudioTestPlatformInstaller@1
  inputs:
    packageFeedSelector: 'nugetOrg'
    versionSelector: 'latestStable'


- task: VSTest@2
  inputs:
    testSelector: 'testAssemblies'
    testAssemblyVer2: |
      **\*test*.dll
      !**\*TestAdapter.dll
      !**\obj\**
    searchFolder: '$(System.DefaultWorkingDirectory)'
    vsTestVersion: 'toolsInstaller'

- task: MSBuild@1
  inputs:
      solution: 'Tenant Tool Analytics Module/*.csproj'
      msbuildArguments: '/target:Publish /p:OutDir=c:\test2\'
      msbuildArchitecture: x64

Примечание. Я не использую группы развертывания Azure, поскольку для этого потребуются привилегии администратора, а получение этих прав - длительный и медленный процесс (в настоящее время выполняется и не гарантируется). Если лучшим решением было бы пройти через это, пожалуйста, прокомментируйте, и я опубликую новый вопрос, когда у меня будут права на запуск «Сценария регистрации (PowerShell)» для группы развертывания.

Я не создалфайл "MyApplicationName.application", но вместо этого он был создан функцией публикации Visual Studios. Я добавил код, найденный ниже.

<?xml version="1.0" encoding="utf-8"?>
<asmv1:assembly xsi:schemaLocation="urn:schemas-microsoft-com:asm.v1 assembly.adaptive.xsd" manifestVersion="1.0" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns="urn:schemas-microsoft-com:asm.v2" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:xrml="urn:mpeg:mpeg21:2003:01-REL-R-NS" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3" xmlns:dsig="http://www.w3.org/2000/09/xmldsig#" xmlns:co.v1="urn:schemas-microsoft-com:clickonce.v1" xmlns:co.v2="urn:schemas-microsoft-com:clickonce.v2">
  <assemblyIdentity name="MyApplicationName.application" version="1.0.0.20" publicKeyToken="0000000000000000" language="neutral" processorArchitecture="amd64" xmlns="urn:schemas-microsoft-com:asm.v1" />
  <description asmv2:publisher="MyApplicationName" asmv2:product="MyApplicationName" xmlns="urn:schemas-microsoft-com:asm.v1" />
  <deployment install="true" co.v1:createDesktopShortcut="true">
    <subscription>
      <update>
        <beforeApplicationStartup />
      </update>
    </subscription>
    <deploymentProvider codebase="file://[Publish Path On Shared Network Drive]" />
  </deployment>
  <compatibleFrameworks xmlns="urn:schemas-microsoft-com:clickonce.v2">
    <framework targetVersion="4.7.2" profile="Full" supportedRuntime="4.0.30319" />
  </compatibleFrameworks>
  <dependency>
    <dependentAssembly dependencyType="install" codebase="Application Files\MyApplicationName_1_0_0_20\MyApplicationName.exe.manifest" size="7240">
      <assemblyIdentity name="MyApplicationName.exe" version="1.0.0.20" publicKeyToken="0000000000000000" language="neutral" processorArchitecture="amd64" type="win32" />
      <hash>
        <dsig:Transforms>
          <dsig:Transform Algorithm="urn:schemas-microsoft-com:HashTransforms.Identity" />
        </dsig:Transforms>
        <dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha256" />
        <dsig:DigestValue>6P...gi+j6...nY=</dsig:DigestValue>
      </hash>
    </dependentAssembly>
  </dependency>
</asmv1:assembly>

Ответы [ 2 ]

1 голос
/ 30 октября 2019

Похоже, мне нужно было добавить свойства OutputPath и OutDir в мои msbuildArguments для правильной работы моего развертывания.

- task: MSBuild@1
  inputs:
      solution: 'Tenant Tool Analytics Module/*.csproj'
      msbuildArguments: '/target:Publish 
      /p:ApplicationVersion=$(AssemblyVersion) 
      /p:UpdateEnabled=true /p:UpdateMode=Foreground 
      /p:ProductName=TenantAnalyticsTool 
      /p:InstallUrl=c:\sandbox\deploytesting\siteA
      /p:PublishUrl=c:\sandbox\deploytesting\siteA
      /p:UpdateUrl=c:\sandbox\deploytesting\siteA
      /p:OutputPath=c:\sandbox\deploytesting\siteA
      /p:OutDir=c:\sandbox\deploytesting\siteA '
      msbuildArchitecture: x64
1 голос
/ 30 октября 2019

Поскольку инфраструктура WPF является частью .NET, вы можете выбрать шаблон .NET DeskTop в конвейере сборки и использовать задачу Publish Artifact для развертывания артефакта сборки настольного приложения .Net в папке общего сетевого диска.

enter image description here

Установите Artifact publish location на A file share, затем вам необходимо ввести путь к папке сетевого диска.

enter image description here

Если вы хотите развернуть на нескольких сетевых дисках, вы можете добавить несколько Publish Artifact задач. Вы можете сослаться на этот кейс с похожей проблемой.

Если вы хотите развернуть в большом количестве мест и не хотите добавлять несколько задач, лучше использовать развертываниегруппа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...