Сгенерируйте setup.exe для развертывания ClickOnce из командной строки, используя MSBuild - PullRequest
4 голосов
/ 17 сентября 2010

У меня есть сценарий MSBuild, который создает мое приложение для форм Windows, генерирует манифест приложения и подписывает его, а затем генерирует манифест развертывания.Сценарий также генерирует файл publish.htm для меня.

Теперь мне нужно сгенерировать файл setup.exe, и до сих пор я не смог выяснить, как VS генерирует его.Как я могу создать файл setup.exe, используя скрипт MSBuild?

Заранее благодарен за помощь!

Ответы [ 2 ]

2 голосов
/ 04 октября 2010

Вы можете использовать встроенную GenerateBootstrapper задачу MSBuild

Когда вы делаете публикацию из Visual Studio, это также то, что использует ClickOnce.

Извлечь C: \ Windows \ Microsoft.NET \ Framework \\ Microsoft.Common.Targets, чтобы точно увидеть, что происходит.

Посмотрите на цель _DeploymentGenerateBootstrapper.

Ваш файл проекта CSharp содержит некоторые элементы и свойства, которыеэта цель использует для выяснения:

  1. Если он собирается сгенерировать загрузчик (свойство BootstrapperEnabled)
  2. Пакеты для генерации загрузчика для (группа элементов BootstrapperPackage)
  3. Откуда будут установлены пакеты (свойство BootstrapperComponentsLocation)

Надеюсь, это имеет смысл.Немного поработав, вы сможете реализовать в своем файле MSBuild именно то, что происходит при публикации из Visual Studio.

1 голос
/ 09 сентября 2016

Флаги, которые вы хотите установить msbuild:

/target:publish

и

/p:PublishDir=C:\Foo\

Обратите внимание, что вы должны иметь конечный \ в каталоге публикации или просто выполнить зависимые шаги при публикации (т. Е. Build) и никогда фактически не создавать установщик.

Вас может заинтересовать пакет msbuild npm:

var msbuild = require('msbuild');
var path = require('path');

// Config
var source = 'source/Bar/Bar.App/Bar.App.csproj';
var deploy = path.join(__dirname, 'deploy');

// Build the project
var builder = new msbuild();
builder.sourcePath = source;
builder.overrideParams.push('/p:PublishDir=' + deploy + "\\"); // <-- Installer
builder.overrideParams.push('/Target:rebuild;publish');
builder.overrideParams.push('/P:Configuration=Release');
builder.overrideParams.push('/P:verbosity=diag');
builder.overrideParams.push('/P:Platform=x86');
builder.overrideParams.push('/fl');
builder.overrideParams.push('/flp:logfile=build.log;verbosity=diagnostic');
builder.publish();

... который вы бы запустили что-то вроде:

npm install msbuild
node builder.js

PowerShell не требуется.

...