ClickOnce-instellingen wijzigen afhankelijk van de geselecteerde buildconfiguratie (alleen .NET Framework-versie)

Pagina bijgewerkt :
Aanmaakdatum van pagina :

milieu

kader
  • Windows Forms (.NET Framework) in het algemeen
  • WPF (.NET Framework) in het algemeen

premisse

De inhoud van deze tips zijn projectaannames voor het .NET Framework. In het geval van .NET (Core) kunt u ClickOnce-publicatie-instellingen instellen in de build-configuratie-eenheid, dus publiceer zoals gewoonlijk.

Het gaat er ook van uit dat u voldoende kennis hebt om ClickOnce normaal te gebruiken.

Eerst

Omdat een .NET Framework-project slechts één ClickOnce-publicatie-instelling kan hebben, Als u bijvoorbeeld wilt publiceren met verschillende instellingen in een Build voor foutopsporing en een Build voor release, moet u de instellingen elke keer handmatig wijzigen voordat u publiceert.

U kunt twee instellingen hebben door de projecten in een DLL te groeperen en twee afzonderlijke projecten voor publicatie te maken. U hebt twee keer dezelfde configuratie en als er bronbestanden nodig zijn voor publicatie, moet u er twee tegelijk hebben, dus het beheer zal lastig zijn.

In dit gedeelte wordt beschreven hoe u een batchbestand (.bat) zoveel instellingen maakt als u nodig hebt en ClickOnce publiceert.

ClickOnce configureren

Deze keer werden "Public Folder Location" en "Installation Folder URL" gescheiden voor "Debug Build" en "Release Build". Andere instellingen worden gemaakt met het beleid om ze gemeenschappelijk te maken. Andere parameters kunnen gescheiden zijn, maar het kan omslachtig zijn om de "toepassingsbestanden" en "vereisten" gescheiden te houden.

Open eerst het project en voer zoals gewoonlijk uw ClickOnce-instellingen in. De invoerinhoud is ingesteld op parameters die door Debug moeten worden uitgegeven, maar iets anders dan het gemeenschappelijke deel is prima zolang het geen fout veroorzaakt.

Hieronder volgt een voorbeeld van de configuratie:

Nadat u hebt getypt, slaat u het project op.

Een .bat bestand maken voor ClickOnce-publicatie

Omdat het wordt uitgegeven met een opdracht, kan het worden uitgevoerd op andere media zoals PowerShell, maar deze keer is het gemaakt als een BAT-bestand.

U kunt het bestand overal maken, maar voor de eenvoud maak ik het op de locatie van het oplossingsbestand (.sln). Aangezien het een BAT-bestand is, is de tekencodering Shift-JIS. PS1 kan UTF-8 (BOM) zijn.

Open het BAT-bestand in een teksteditor en typ: Houd er rekening mee dat PowerShell anders kan omgaan met ontsnappen.

call "C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\Tools\VsDevCmd.bat"
cd %~dp0
msbuild ClickOnceBuildConfiguration.sln /t:Publish /p:Configuration=Debug /p:PublishUrl="publish\Debug\\" /p:InstallUrl="\\xxxxServer\publish_Debug\\"

De eerste regel verwijst naar de locatie van "Developer Command Prompt". Dit pad is afhankelijk van de versie van Visual Studio die u installeert.

Elk deel van het pad is afhankelijk van de volgende voorwaarden:

Programmabestanden
Pad voorwaarden
Programmabestanden
  • Als u een 32-bits besturingssysteem gebruikt
  • Als u een 64-bits versie van Visual Studio gebruikt op een 64-bits besturingssysteem
Programmabestanden (x86)
  • Als u een 32-bits versie van Visual Studio gebruikt op een 64-bits besturingssysteem
2022
Dit is afhankelijk van de versie van Visual Studio die u installeert.
Gemeenschap
Dit is afhankelijk van de versie van Visual Studio die u installeert. "Community", "Professional", "Enterprise", etc. worden ingevoerd.

De tweede regel verplaatst de huidige map naar de locatie van het BAT-bestand.

De derde regel is de ClickOnce build processing command. De betekenis van elke parameter is als volgt.

beschrijving van parameternaam
MsBuild Een opdracht waarmee het buildproces wordt uitgevoerd. Vereist en eerst geschreven.
ClickOnceBuildConfiguration.sln Hierin wordt de bestandsnaam beschreven van de te bouwen oplossing.
/t:Publish Geeft een ClickOnce-buildproces aan.
/p:Configuration=Debug Hiermee geeft u de buildconfiguratie op die u voor uw oplossing hebt ingesteld. Als u de te bouwen foutopsporingsconfiguratie wilt wijzigen, wijzigt u de tekst in het gedeelte 'Foutopsporing'.
/p:PublishUrl="publish\Debug\\" Overschrijf de waarde van 'Locatie van openbare map' op het publicatiescherm van Visual Studio met de opgegeven tekenreeks en voer deze uit.
/p:InstallUrl="\\xxxxServer\publish_Debug\\" Overschrijf de waarde van 'URL van installatiemap' op het publicatiescherm van Visual Studio met de opgegeven tekenreeks en voer deze uit.

Sommige parameters zijn geëxtraheerd, maar zie de volgende koppelingen voor andere parameters:

Als voorbeeld zullen we deze keer de publicatieparameters van ClickOnce in elke foutopsporing en Release-build wijzigen, dus we zullen deze als volgt maken.

Gepubliceerd door ClickOnceDebug.bat

call "C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\Tools\VsDevCmd.bat"
cd %~dp0
msbuild ClickOnceBuildConfiguration.sln /t:Publish /p:Configuration=Debug /p:PublishUrl="publish\Debug\\" /p:InstallUrl="\\xxxxServer\publish_Debug\\"

ClickOnceRelease Gepubliceerd .bat

call "C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\Tools\VsDevCmd.bat"
cd %~dp0
msbuild ClickOnceBuildConfiguration.sln /t:Publish /p:Configuration=Release /p:PublishUrl="publish\Release\\" /p:InstallUrl="\\xxxxServer\publish_Release\\"

ClickOnce publiceert bat-bestandsuitvoering

Probeer elk BAT-bestand uit te voeren.

De opdrachtprompt wordt gestart en de build wordt gestart.

Eigenlijk is het BAT-bestand dat deze keer is gemaakt slechts een proces tot de build, dus het bestand wordt niet gemaakt in de "openbare maplocatie". De bestanden die nodig zijn voor publicatie zijn gemaakt. In het geval van een build voor foutopsporing moet u bijvoorbeeld een bestand hebben in het pad naar de projectmap < >\bin\Debug\app.publish\". Kopieer deze bestanden naar de "URL van de installatiemap" en het zal correct werken als ClickOnce.

Publiceer naar een openbare maplocatie (als de bestemming een map is waartoe u rechtstreeks toegang hebt)

De volgende site wordt gebruikt als referentie voor dit deel.

Dit gebied is niet direct gerelateerd aan de verwerking van ClickOnce, dus raadpleeg de bovenstaande site voor een gedetailleerde uitleg.

Open eerst het projectbestand (.csproj) in een teksteditor. Het is geen oplossingsbestand.

Binnenin bevindt zich een XML-structuur en als u naar beneden scrolt, voegt u de </Project> volgende code toe aan de regel erboven. Als het een premisseproces voor het kopiëren van bestanden is, is de inhoud vast, maar het deel van is CopyPublishedApplication willekeurig. U zult deze naam later gebruiken.

<!-- ここから ClickOnce の発行処理 -->
<Target Name="CopyPublishedApplication">
  <ItemGroup>
    <MySourceFiles Include="$(PublishDir)**\*.*" Exclude="$(PublishDir)$(AssemblyName).exe" />
  </ItemGroup>
  <PropertyGroup>
    <AppricationDir>$(_DeploymentApplicationDir.Substring($(PublishDir.Length)))</AppricationDir>
  </PropertyGroup>
  <Copy SourceFiles="@(MySourceFiles)" DestinationFiles="@(MySourceFiles->'$(PublishUrl)%(RecursiveDir)%(Filename)%(Extension)')" />
</Target>
<!-- ここまで ClickOnce の発行処理 -->

Sla het op zodra u het hebt ingevoerd.

Open vervolgens elk BAT-bestand en voeg toe aan de /t:CopyPublishedApplication msbuild-parameters. CopyPublishedApplication is de naam die ik je eerder gaf.

ClickOnceDebug publiceert.bat (voorbeeld)

call "C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\Tools\VsDevCmd.bat"
cd %~dp0
msbuild ClickOnceBuildConfiguration.sln /t:Publish /t:CopyPublishedApplication /p:Configuration=Debug /p:PublishUrl="publish\Debug\\" /p:InstallUrl="\\xxxxServer\publish_Debug\\"

Wanneer u het BAT-bestand uitvoert, ziet u dat het bestand is gekopieerd naar de locatie van de openbare map. Op dit moment is er geen < programmanaam >.exe bestand, maar het is onnodig omdat het oorspronkelijk is opgenomen in setup.exe.

aanvulling

Als er meerdere projecten in de oplossing zijn, wordt deze voor alle projecten uitgevoerd CopyPublishedApplication . In de meeste gevallen is het alleen ingesteld op het exe-project, dus er wordt een fout weergegeven bij het uitvoeren in CopyPublishedApplication een ander project, Het is veilig om het te negeren omdat het alleen een bericht weergeeft.

Publiceren naar een openbare maplocatie (voor FTP)

Ik heb het niet geprobeerd, maar misschien wilt u verwijzen naar de volgende sites.

Andere dingen om in gedachten te houden