2

В настоящее время я работаю над сборкой для проекта, но мне сложно встретить TFS Build.
Я просто хочу создать пакет zip, используя TFS Build, с параметрами из IIS Express.MSBuild на TFS не удалось - пакет WebDeploy

конфигурации CSPROJ: Web Package/Publish Web

IIS Express присутствует на моем компьютере и на сервере сборки (я могу получить доступ к * SVC-файлов в проекте).
И все находится на контроле источника.

Когда я использую «Развертывание пакета развертывания» на своей машине, у меня есть почтовый индекс.
Когда я использую «Build Deployment Package» на сервере сборки, у меня есть zip.
Когда я использую командную строку MSBuild на обоих, у меня есть zip.

Командная строка в вопросе:

"C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe" "C:\WORKSPACES\[...]\Project.csproj" /p:Platform=AnyCPU;Configuration=Release /p:DeployTarget=Package /p:DeployOnBuild=true;DefaultPackageFileName=ZipName.zip 

Но когда я ставлю ту же командную строку в сборке, он не:

"C:\Builds\2\[...]\Project.csproj" (default target) (1) -> 
(PackageUsingManifest target) -> 
    C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.targets(3009,5): error : Web deployment task failed.(Object of type 'manifest' and path 'C:\Builds\2\Project Release\Binaries\_PublishedWebsites\Project_Package\Project.SourceManifest.xml' cannot be created.) [C:\Builds\2\[...]\Project.csproj] 
C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.targets(3009,5): error : [C:\Builds\2\[...]\Project.csproj] 
C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.targets(3009,5): error : Object of type 'manifest' and path 'C:\Builds\2\Project Release\Binaries\_PublishedWebsites\Project_Package\Project.SourceManifest.xml' cannot be created. [C:\Builds\2\[...]\Project.csproj] 
C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.targets(3009,5): error : One or more entries in the manifest 'sitemanifest' are not valid. [C:\Builds\2\[...]\Project.csproj] 
C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.targets(3009,5): error : Site '' does not exist. [C:\Builds\2\[...]\Project.csproj] 

ДОПОЛНИТЕЛЬНО, линия 3009 см:

<VSMSDeploy Condition="!$(UseMsdeployExe)" 
    MSDeployVersionsToTry="$(_MSDeployVersionsToTry)" 
    Source="@(MsDeploySourceProviderSetting)" 
    Destination="@(MsDeployDestinationProviderSetting)" 
    DeploymentTraceLevel="$(PackageTraceLevel)" 
    DisableLink="$(PackageDisableLinks)" 
    EnableLink="$(PackageEnableLinks)" 
    DeclareParameterItems="@(_Package_MsDeployDeclareParameters)" 
    OptimisticParameterDefaultValue="$(EnableOptimisticParameterDefaultValue)" 
    ImportDeclareParametersItems="$(_VsPackageParametersFile)" 
    ReplaceRuleItems="@(MsDeployReplaceRules)" 
    RetryAttempts="$(RetryAttemptsForDeployment)"> 

Я знаю, что чего-то не хватает, но я не понимаю, что ... так что, если у вас есть предложения ... это будет очень хорошо е! :)

Строка tfs не запускалась с той же учетной записью, кроме меня, когда я зашел на сервер сборки.
Является ли IIS Express успешным запуском с сборкой tfs?
Когда я смотрю в C:\Users\svcTfsBuild\Documents, нет каталога IISExpress, как у моего пользователя (svcTfsBuild - это служебная учетная запись для TFS Build).

Основная цель:

  • Получить пакет зип с TFS построить с этими параметрами (parameters.xml в пакете на молнии).
  • OR
  • Имейте почтовый пакет, где мы можем указать пул приложений и физический путь при импорте.

Как это:

<parameters> 
    <parameter name="IIS Web Application Name" defaultValue="Default Web Site/Project" tags="IisApp"> 
    <parameterEntry kind="ProviderPath" scope="AppHostConfig" match="^ProjectTest/Project$" /> 
    <parameterEntry kind="ProviderPath" scope="contentPath" match="^C:\\WORKSPACES\\[...]\\obj\\Release\\Package\\PackageTmp$" /> 
    <parameterEntry kind="ProviderPath" scope="setAcl" match="^C:\\WORKSPACES\\[...]\\obj\\Release\\Package\\PackageTmp$" /> 
    </parameter> 
    <parameter name="IIS Web Application Pool Name" defaultValue="ASP.NET v4.0"> 
    <parameterEntry kind="DeploymentObjectAttribute" scope="application" match="application[@applicationPool='Clr4IntegratedAppPool']/@applicationPool" /> 
    </parameter> 
    <parameter name="IisVirtualDirectoryPhysicalPath" defaultValue="D:\CompanyName\Project" tags="PhysicalPath"> 
    <parameterEntry kind="DestinationVirtualDirectory" scope=".*" match="^C:\\WORKSPACES\\[...]$" /> 
    </parameter> 
</parameters> 

Примечание: мы можем уточним конфигурацию в parameters.xml непосредственно на csproj, потому что рабочая область не то же самое на наших машинах, на TFS построить сервер .. ,

Я надеюсь, что это ясно

EDIT: предложение от дрик

Как вы сказали, я запускаю командную строку из учетной записи службы, и получил это, в частности:

GenerateMsdeployManifestFiles: 
    Generate source manifest file for Web Deploy package/publish ... 
C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.targets(2850,5): error MSB4018: The "IsCleanMSDeployPackageNeeded" task failed unexpectedly. [C:\WORKSPACES\[...]\Project.csproj] 
C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.targets(2850,5): error MSB4018: System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> Microsoft.Web.Deployment.DeploymentException: Object of type 'package' and path 'C:\WORKSPACES\[...]\obj\Release\Package\Project.zip' cannot be created. ---> Microsoft.Web.Deployment.DeploymentException: The Zip package 'C:\WORKSPACES\[...]\obj\Release\Package\Project.zip' could not be loaded. ---> System.UnauthorizedAccessException: Access to the path 'C:\WORKSPACES\[...]\obj\Release\Package\Project.zip' is denied. [C:\WORKSPACES\[...]\Project.csproj] 
C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.targets(2850,5): error MSB4018: at Microsoft.Web.Deployment.Win32Native.RaiseIOExceptionFromErrorCode(Win32ErrorCode errorCode, String maybeFullPath) [C:\WORKSPACES\[...]\Project.csproj] 
C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.targets(2850,5): error MSB4018: at Microsoft.Web.Deployment.FileStreamEx.CreateInstance(String path, FileMode fileMode, FileAccess fileAccess, FileShare fileShare) [C:\WORKSPACES\[...]\Project.csproj] 
C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.targets(2850,5): error MSB4018: at Microsoft.Web.Deployment.ZipFile.Load() [C:\WORKSPACES\[...]\Project.csproj] 
C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.targets(2850,5): error MSB4018: at Microsoft.Web.Deployment.ZipPackageProvider..ctor(DeploymentProviderContext providerContext, DeploymentBaseContext baseContext, String path) [C:\WORKSPACES\[...]\Project.csproj] 
C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.targets(2850,5): error MSB4018: --- End of inner exception stack trace --- [C:\WORKSPACES\[...]\Project.csproj] 
C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.targets(2850,5): error MSB4018: at Microsoft.Web.Deployment.ZipPackageProvider.GetAttributes(DeploymentAddAttributeContext addContext) [C:\WORKSPACES\[...]\Project.csproj] 
C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.targets(2850,5): error MSB4018: at Microsoft.Web.Deployment.DeploymentObject.EnsureValidAttributes() [C:\WORKSPACES\[...]\Project.csproj] 
C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.targets(2850,5): error MSB4018: --- End of inner exception stack trace --- [C:\WORKSPACES\[...]\Project.csproj] 
C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.targets(2850,5): error MSB4018: at Microsoft.Web.Deployment.DeploymentManager.CreateObjectPrivate(DeploymentProviderContext providerContext, DeploymentBaseOptions baseOptions, DeploymentObject sourceObject) [C:\WORKSPACES\[...]\Project.csproj] 
C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.targets(2850,5): error MSB4018: at Microsoft.Web.Deployment.DeploymentManager.CreateObject(DeploymentProviderOptions providerOptions, DeploymentBaseOptions baseOptions) [C:\WORKSPACES\[...]\Project.csproj] 
C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.targets(2850,5): error MSB4018: at Microsoft.Web.Deployment.DeploymentManager.CreateObject(String provider, String path, DeploymentBaseOptions baseOptions) [C:\WORKSPACES\[...]\Project.csproj] 
C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.targets(2850,5): error MSB4018: at Microsoft.Web.Deployment.DeploymentManager.CreateObject(DeploymentWellKnownProvider provider, String path) [C:\WORKSPACES\[...]\Project.csproj] 
C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.targets(2850,5): error MSB4018: --- End of inner exception stack trace --- [C:\WORKSPACES\[...]\Project.csproj] 
C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.targets(2850,5): error MSB4018: at System.RuntimeMethodHandle._InvokeMethodFast(IRuntimeMethodInfo method, Object target, Object[] arguments, SignatureStruct& sig, MethodAttributes methodAttributes, RuntimeType typeOwner) [C:\WORKSPACES\[...]\Project.csproj] 
C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.targets(2850,5): error MSB4018: at System.RuntimeMethodHandle.InvokeMethodFast(IRuntimeMethodInfo method, Object target, Object[] arguments, Signature sig, MethodAttributes methodAttributes, RuntimeType typeOwner) [C:\WORKSPACES\[...]\Project.csproj] 
C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.targets(2850,5): error MSB4018: at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks) [C:\WORKSPACES\[...]\Project.csproj] 
C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.targets(2850,5): error MSB4018: at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture) [C:\WORKSPACES\[...]\Project.csproj] 
C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.targets(2850,5): error MSB4018: at System.RuntimeType.InvokeMember(String name, BindingFlags bindingFlags, Binder binder, Object target, Object[] providedArgs, ParameterModifier[] modifiers, CultureInfo culture, String[] namedParams) [C:\WORKSPACES\[...]\Project.csproj] 
C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.targets(2850,5): error MSB4018: at Microsoft.Web.Publishing.Tasks.DynamicAssembly.CallStaticMethod(String typeName, String methodName, Object[] arguments) [C:\WORKSPACES\[...]\Project.csproj] 
C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.targets(2850,5): error MSB4018: at Microsoft.Web.Publishing.Tasks.IsCleanMSDeployPackageNeeded.Execute() [C:\WORKSPACES\[...]\Project.csproj] 
C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.targets(2850,5): error MSB4018: at Microsoft.Build.BackEnd.TaskExecutionHost.Microsoft.Build.BackEnd.ITaskExecutionHost.Execute() [C:\WORKSPACES\[...]\Project.csproj] 
C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.targets(2850,5): error MSB4018: at Microsoft.Build.BackEnd.TaskBuilder.ExecuteInstantiatedTask(ITaskExecutionHost taskExecutionHost, TaskLoggingContext taskLoggingContext, TaskHost taskHost, ItemBucket bucket, TaskExecutionMode howToExecuteTask, Boolean& taskResult) [C:\WORKSPACES\[...]\Project.csproj] 
Done Building Project "C:\WORKSPACES\[...]\Project.csproj" (default targets) -- FAILED. 

Build FAILED. 

Я проверил учетную запись службы (SvcTfsBuild в моем случае). Он имеет полный контроль над рабочей областью (поэтому исходный код). И моя учетная запись и учетная запись SvcTfsBuild находятся в тех же группах (локальный администратор).

Но журнал BUILD TFS (многословный режим) не показал каких-либо проблем разрешения ...

EDIT 2013/03/25

Я снимите флажок "Использовать IIS Express" в вкладку «Веб».
Сборка создает хороший почтовый пакет.
Итак, я думаю, что есть проблема только с IIS Express.

В сборке у меня была «InvokeProcess» в последовательности «Run On Agent» сразу после «CreateLabel».
Это запуск МКС Экспресс с этими аргументами:

/site:Project-Site 

В файле журнала, я получил результат 0 (так, я предполагаю, что МКС Экспресс запуска хорошо, если нет, то он должен бросаться исключение). Но если командная строка плохо сформирована или неверна (т. Е. С/сайтом и/путь, который не может быть скомбинирован), результат также равен 0.
И если я запускаю ISS Express таким образом, сборка останавливается (iisexpress ждет ручного действия, чтобы остановить или просто слушать).

EDIT 2 2013/03/25

Чтобы запустить IIS Express в то же время, чем строить, я сделал это: TFBUILD

На параллели, я получил переменная с именем «BuildFinished», для которой установлено значение True в конце процесса сборки (слева).

Но, у меня опять та же ошибка (сайт «не существует»).

Я также нашел разницу между двумя Project.SourceManifest.xml при сборке через «Построить пакет развертывания» (в VS2010) и через TFBUILD.

Сложение Развертывание пакета:

<?xml version="1.0" encoding="utf-8"?> 
<sitemanifest> 
    <appHostConfig path="Project-Site/Project" /> 
    <contentPath path="C:\WORKSPACES\Project\obj\Release\Package\PackageTmp" /> 
    <setAcl path="C:\WORKSPACES\Project\obj\Release\Package\PackageTmp" setAclResourceType="Directory" /> 
    <setAcl path="C:\WORKSPACES\Project\obj\Release\Package\PackageTmp" setAclUser="anonymousAuthenticationUser" setAclResourceType="Directory" /> 
</sitemanifest> 

TFBUILD:

<?xml version="1.0" encoding="utf-8"?> 
<sitemanifest> 
    <appHostConfig path="/Project" /> 
    <contentPath path="C:\Builds\1\Project\obj\Release\Package\PackageTmp" /> 
    <setAcl path="C:\Builds\1\Project\obj\Release\Package\PackageTmp" setAclResourceType="Directory" /> 
    <setAcl path="C:\Builds\1\Project\obj\Release\Package\PackageTmp" setAclUser="anonymousAuthenticationUser" setAclResourceType="Directory" /> 
</sitemanifest> 

значение Путь не то же самое.

+1

Я предлагаю запустить команду под учетной записью службы построения, чтобы увидеть полный вывод, звучит как проблема с разрешением. Какую учетную запись выполняет сборка tfs? – drk

+0

Вы правы в вопросе разрешения с учетной записью службы. Я редактирую вопрос с соответствующим выходом. – kerrubin

+1

Попробуйте создать этот файл вручную под учетной записью svc, проверить разрешения или право собственности, если он существует и в папке, также может быть связан с UAC. – drk

ответ

2

После нескольких попыток, я думаю, что проблема заключается в IIS Express и MSDeploy, которые не могут работать вместе (это одно из слов «Site '' does not exist.»).

Итак, вместо того, чтобы пытаться заставить его работать, мы передумаем использовать конфигурацию, которая работает: изменение csproj во время процессов сборки для использования IIS.

Шаг 1: IIS на сервере сборки

  1. Создание пула приложений: имя и Framework версии являются две вещи, что имеет значение. Больше ничего.
  2. Создание приложения: имя и пул приложений важны. Вы можете использовать C: \ temp как физический путь.

Шаг 2: определение построить в
У вас есть два варианта: создать пользовательские сборки активность (лучше один) или сделать это внутри XAML (уродливый).
Цель, чтобы иметь следующие шаги:

  1. на последовательности «Run On Agent», только после того, как «Если Создать ярлык»
  2. Удалите только для чтения атрибута на целевом csproj (один на рабочее пространство создано TFS)
  3. Читать содержательная csproj в
  4. Замените следующие XML-теги

<UseIISExpress>True</UseIISExpress> по <UseIISExpress>False</UseIISExpress> !
<UseIIS>False</UseIIS> по <UseIIS>True</UseIIS>
<IncludeIisSettings>False</IncludeIisSettings> по <IncludeIisSettings>true</IncludeIisSettings>
<IISUrl>{IIS Express URL}</IISUrl> по <IISUrl>{IIS URL}</IISUrl>
/\ Осторожно: в булевы может быть правдой или правдой!
/\ Beware2: при использовании Кассини, тэг IISUrl может иметь перенос слов, как:

`<IISUrl> 
</IISUrl>` 

Это произошло только с одной машины 4 Дэв.

{URL-адрес IIS Express}: это как http://localhost:8080/ или http://localhost:8080/Application с IIS Express или пустой с Cassini.
{URL-адрес IIS}: это как http://localhost/Application.

 
И, наконец, переписать csproj (помните, один в рабочем ССТ в, а не на на контроле источника) с содержанием модификации.

{URL-адрес IIS Express} и {URL-адрес IIS} могут быть аргументами из сборки, но только если сборка выполняется csproj по одному (1 build = 1 zip-пакет, поэтому 1 csproj должен быть изменен).

 
 
С этим решением (я думаю, что лучше один, что я не знаю), мы используем такую ​​конфигурацию, что мы знаем, это работает.

Когда zip-пакет будет импортироваться в IIS, пул приложений и физический путь могут быть изменены.
И это наша цель.

Надеюсь, это поможет.