* .wpp.targets игнорируется при публикации чистого решения - PullRequest
0 голосов
/ 08 февраля 2019

Когда я впервые публикую свое решение, содержащее веб-приложение ASP.NET, файл .wpp.targets игнорируется.Папка публикации содержит также файлы, которые не должны публиковаться.

После удаления всех файлов из моей папки публикации и повторной публикации все в порядке.Но когда я делаю чистое решение из Visual Studio, файл .wpp.targets снова игнорируется.

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

Что я использовал:

MSBuild версия 15.8.166 "C: \ Program Files (x86) \ Microsoft Visual Studio \ 2017 \ Enterprise \ MSBuild \ 15.0 \ Bin \ msbuild.exe "WebApplication1.sln / p: DeployOnBuild = true / p: DeployDefaultTarget = WebPublish / p: WebPublishMethod = FileSystem / p: publishUrl = C: \ test

MSBuild версия 16.0.360 "C: \ Program Files (x86) \ Microsoft Visual Studio \ 2019 \ Preview \ MSBuild \ Current \ Bin \ msbuild.exe" WebApplication1.sln / p: DeployOnBuild = true / p: DeployDefaultTarget = WebPublish / p: WebPublishMethod = FileSystem / p: publishUrl = C: \ test

Я запустил сборки с файлом wpp.target, который содержал имя моего проекта, но я попробовал его также сСледующий параметр MSBuild: /p:WebPublishPipelineCustomizeTargetFile=C:\Users\username\source\repos\Test\WebApplication1\test.wpp.targets


Обновление

При создании проекта в первый разили после очистки сборки подстановочные знаки в файле * .wpp.targets не работают.Вот пример моего файла * .wwp.targets:

<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<ExcludeFromPackageFolders Include="bin\roslyn">
<FromTarget>Roslyn</FromTarget>
</ExcludeFromPackageFolders>
<ExcludeFromPackageFiles Include="bin\Newtonsoft.*">
<FromTarget>Newtonsoft</FromTarget>
</ExcludeFromPackageFiles>
</ItemGroup>
</Project>

Roslyn исключен, как и ожидалось.Но Newtonsoft. * Не исключены, потому что в названии есть подстановочный знак.

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

Что я использовал: MSBuild версия 15.8.166 и MSBuild версия 16.0.360

Пример используемого команды msbuild: "C: \ Program Files (x86) \ Microsoft Visual Studio \ 2019\ Preview \ MSBuild \ Current \ Bin \ msbuild.exe "WebApplicationTestForMsBuild.sln / p: DeployOnBuild = true / p: DeployDefaultTarget = WebPublish / p: WebPublishMethod = FileSystem / p: publishUrl = C: \ test

* 1030 вв других проектах мы заметили, что некоторые шаблоны, похоже, работают для большинства файлов, но не для всех.Примером этого является: «<ExcludeFromPackageFiles Include="bin\*.pdb">» большинство файлов pdb или исключение, но не все из них.

Я хотел бы использовать его на нашем сервере сборки, где сборка всегда начинается с чистого решения.Эта проблема кажется ошибкой в ​​msbuild, но если вы знаете решение, поделитесь им со мной.


Обновление 2

Шаги одного изтесты, которые я выполнил:

  1. Создайте новый проект пустого веб-приложения ASP.Net (.NET Framework 4.6.1) в Visual studio Enterprise 2017 (версия 15.9.7).
  2. Добавьте [ProjectName] .wpp.targets в проект, который содержит ранее описанные данные.
  3. Установите пакет nuget Newtonsoft.Json (версия 12.0.1) (используется в качестве примера)
  4. Я запускаю следующую команду в командной строке: «C: \ Program Files (x86) \ Microsoft Visual Studio \ 2017 \ Enterprise \ MSBuild \ 15.0 \ Bin \ msbuild.exe» [projectName] .csproj / p: DeployOnBuild = true/ p: DeployDefaultTarget = WebPublish / p: WebPublishMethod = FileSystem / p: publishUrl = C: \ test / p: DeleteExistingFiles = True
  5. Я заглянул в папку C: \ test \ bin и нашел следующие файлы:
    • Microsoft.CodeDom.Providers.DotNetCompilerPlatform.DLL
    • Newtonsoft.Json.dll
    • Newtonsoft.Json.pdb
    • [имя_проекта] .dll
    • [имя_проекта] .pdb Но Newtonsoft.JsonФайлы .dll и Newtonsoft.Json.pdb не должны публиковаться.
  6. Я снова запускаю команду msbuild, и она работает как положено.В папке публикации есть только следующие файлы:
    • Microsoft.CodeDom.Providers.DotNetCompilerPlatform.dll
    • [projectName] .dll
    • [projectName] .pdb
  7. Я сделал чистое решение в своем экземпляре Visual Studio или с помощью команды msbuild: "C:\ Program Files (x86) \ Microsoft Visual Studio \ 2017 \ Enterprise \ MSBuild \ 15.0 \ Bin \ msbuild.exe "WebApplication7wpp.csproj -target: Clean
  8. Еще раз введите команду сборки msbuild и добавьте файлы Newtonsoftснова.

wpp.targets работает, как и ожидалось, когда я не использую подстановочные знаки.

Ответы [ 2 ]

0 голосов
/ 20 июня 2019

Что может быть полезно для других, так это:

После добавления файла .targets: закройте и перезапустите Visual Studio.Visual Studio кэширует материал .target при его запуске, поэтому изменения не имеют никакого эффекта.

0 голосов
/ 11 февраля 2019

Похоже, это связано с отсутствием ссылки на файл wpp.targets.

Для чистого решения откройте файл xxx.csproj и проверьте, существует ли <Content Include="test.wpp.targets" /> в<ItemGroup> тег.Если нет, то добавьте это предложение вручную в тег.

Каждый раз, прежде чем публиковать его с помощью команды msbuild, мы должны убедиться, что у нас есть ссылка на файл wpp.targets, чтобы его можно было найти и развернуть в папке публикации.,

Дополнительно:

1.Мы можем добавить параметр / p: DeleteExistingFiles.Команда ниже хорошо работает на моей стороне.

MSBuild.exe xxx.csproj /p:DeployOnBuild=True /p:DeployDefaultTarget=WebPublish /p:WebPublishMethod=FileSystem /p:DeleteExistingFiles=True /p:publishUrl=C:\test

2. Убедитесь, что wpp.targets находится в папке Project, а не в папке Solution. Надеюсь, это поможет.Любое обновление, пожалуйста, поделитесь здесь.

Обновление 1

Поскольку я воспроизвел эту проблему и провел несколько тестов с ней, теперь я обновляю некоторые новые открытия.

Описание: Эта ситуация странная.Поэтому я проверяю журнал сборки. И мы можем найти причину этой проблемы по рисункам ниже:

Журнал для первой публикации в папке TestMe: enter image description here Журнал для второй публикациив новой папке: enter image description here Как показано выше. Первая публикация копирует файлы, которые мы исключаем, в obj, а вторая публикация имеет действие удаления, которое является причиной того, что она работает хорошо во второй раз, когда выупомянутый выше в Update2.До сих пор причина, по которой исключение не работает, неизвестна. Это может быть связано с порядком вызовов во время выполнения или с самим msbuild.

Альтернативное решение:

Я знаю, что вы хотите чистую публикацию.So, before we use the publish command, we can use a simple build command or rebuild command locally. Он работает на моей стороне, и, поскольку это локальная сборка, которая не повлияет на процесс публикации до того, как мы ее опубликуем, вы можете получить чистую и успешную публикацию по своему желанию.Надеюсь, что это работает.

...