2017-01-11 2 views
4

С разработкой пользовательской задачи MSBuild с Visual Studio 2017 RC у меня возникает следующая проблема: как только я добавляю другие зависимости, а не только Microsoft.Build.Utilities.Core (используя v15.1.0-preview-000458-02 для. NET Core Support), я не могу загрузить задачу в другой проект .csproj MSBuild, поскольку зависимости не найдены.Visual Studio 2017 Разработка задачи MSBuild

Есть ли способ автоматически скопировать все зависимости в папку Debug? Или мне нужно публиковать его каждый раз, когда я хочу его протестировать?

Update1:
Проблемы публиковать что-то местное в мою среду и был исправлен.

Update2:
кажется, что как только я меняю TargetFramework от netstandard1.4 к netstandard1.6 он даже не в состоянии загрузить задание. Как только я использую netstandard 1,6 он бросает исключение:

The task could not be loaded from the assembly. 
Could not load file or assembly 'System.Runtime, Version=4.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its 
dependencies. 
+1

Если у вас есть два разных вопроса, вы должны спросить их отдельно. – svick

+0

В любом случае, часть вторая была несвязанной проблемой, поэтому осталось только один. – Fionn

ответ

2

Есть ли способ автоматически копировать все зависимости в папке Debug? Или делать Я должен публиковать его каждый раз, когда я хочу его протестировать?

По умолчанию и по уважительным причинам, проекты .NET Core и .NET Standard не копируют ссылочные сборки в папку сборки. Вместо этого они разрешают их из кеша NuGet.

Но если вам это действительно нужно, это поведение можно изменить, переопределив значение по умолчанию с помощью параметра CopyLocalLockFileAssemblies.

<CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies> 

Cref: https://github.com/dotnet/sdk/blob/d20405f91a2959fa91fea6285d9a896286727f2a/src/Tasks/Microsoft.NET.Build.Tasks/build/Microsoft.NET.Sdk.BeforeCommon.targets#L55-L56

Второй вопрос

кажется, что как только я меняю TargetFramework от netstandard1.4 к netstandard1.6

Строить сборку задач, которая работает как на «MSBuild.exe», так и на «dotnet.exe msbuild», вы должны настроить таргетинг на ne tstandard1.4 или ниже. netstandard1.6 несовместим с .NET Framework 4.6.1 (в котором работает MSBuild.exe.)

Если вам нужен API, недоступный в netstandard1.4, вам необходимо выполнить кросс-компиляцию своей задачи для .NET Framework и .NET Standard, что значительно сложнее, но может быть сделано.

+0

Я нашел решение, которое не требует требования копирования копий (что мне также очень нравится). Но, возможно, у кого-то есть действительный прецедент для этого ответа. Спасибо, в любом случае :) – Fionn

Смежные вопросы