是否可以使用GitHub Actions自动构建安装程序?这是一个包含多个.NET项目和一个“Visual Studio Installer Project”(a.k.a. vdproj
)的VSTO添加程序解决方案。我需要在提交到特定分支时构建安装程序项目。
是否可以使用GitHub Actions自动构建安装程序?这是一个包含多个.NET项目和一个“Visual Studio Installer Project”(a.k.a. vdproj
)的VSTO添加程序解决方案。我需要在提交到特定分支时构建安装程序项目。
是的,这是可能的。
首先,请确保环境是Windows:
jobs:
....
runs-on: windows-2022
要构建VSTO解决方案,首先需要导入pfx证书:
- name: Import certificate from the command-line
shell: pwsh
run: |
$Secure_String_Pwd = ConvertTo-SecureString "<password>" -AsPlainText -Force
Import-PfxCertificate -FilePath '${{github.workspace}}\<path>\project1_TemporaryKey.pfx' -CertStoreLocation Cert:\CurrentUser\My -Password $Secure_String_Pwd
- name: setup-msbuild
uses: microsoft/setup-msbuild@v1.1.3
- name: Set VS.net environment
run: cmd.exe /C CALL "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvars32.bat"
- name: Build VSTO
run: msbuild ${{github.workspace}}\yourproject.sln -t:rebuild /p:Platform="Any CPU" /p:Configuration="Release" /nologo /nr:false /p:VisualStudioVersion="17.0"
并构建Visual Studio安装程序项目:
- name: Setup VS Dev Environment
uses: seanmiddleditch/gha-setup-vsdevenv@v4
- name: Build installer
run: devenv.com ${{github.workspace}}\yourproject\yourproject.vdproj /build "Release|Any CPU"
jobs:
build:
runs-on: windows-2019
你可能需要应用修复该错误的注册表修改
------ Starting pre-build validation for project 'YourInstaller' ------
ERROR: An error occurred while validating. HRESULT = '8000000A'
- name: DisableOutOfProc Fix
run: |
function Invoke-DisableOutOfProcBuild {
param ();
$visualStudioWherePath = ('{0}/Microsoft Visual Studio/Installer/vswhere.exe' -f ${Env:ProgramFiles(x86)});
$visualStudioInstallationPath = & $visualStudioWherePath -latest -products 'Microsoft.VisualStudio.Product.Enterprise' -property 'installationPath';
$currentWorkingDirectory = ('{0}/Common7/IDE/CommonExtensions/Microsoft/VSI/DisableOutOfProcBuild' -f $visualStudioInstallationPath);
Set-Location -Path $currentWorkingDirectory;
$disableOutOfProcBuildPath = ('{0}/DisableOutOfProcBuild.exe' -f $currentWorkingDirectory);
& $disableOutOfProcBuildPath;
return;
}
Invoke-DisableOutOfProcBuild