2017-01-11 2 views
4

Avec le développement d'une tâche MSBuild personnalisée avec Visual Studio 2017 RC, j'ai le problème suivant: Dès que j'ajoute d'autres dépendances que juste Microsoft.Build.Utilities.Core (en utilisant v15.1.0-preview-000458-02 pour. NET Core Support), je ne peux pas charger la tâche dans un autre projet .csproj MSBuild car les dépendances sont introuvables.Visual Studio 2017 Développement de tâches MSBuild

Existe-t-il un moyen de copier automatiquement toutes les dépendances dans le dossier Debug? Ou dois-je le publier chaque fois que je veux le tester?

Update1:
Le problème avec la publication était quelque chose de local à mon environnement et a été corrigé.

Update2:
Il semble que dès que je change la TargetFramework de netstandard1.4 à netstandard1.6 il est même pas capable de charger la tâche du tout. Dès que je l'utilise netstandard 1.6, il lance une exception:

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

Si vous avez deux questions différentes, vous devriez les poser séparément. – svick

+0

La deuxième partie était un problème sans rapport de toute façon, il n'y en a plus qu'une. – Fionn

Répondre

2

Est-il possible de copier automatiquement toutes les dépendances dans le dossier de débogage? Ou faire Je dois le publier chaque fois que je veux le tester?

Par défaut et pour de bonnes raisons, les projets .NET standard de base et .NET ne copient pas les ensembles référencés dans le dossier de construction. Au lieu de cela, ils sont résolus à partir du cache NuGet.

Mais si vous en avez vraiment besoin, ce comportement peut être modifié en remplaçant le paramètre par défaut par le paramètre 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

Deuxième question

Il semble que dès que je change la TargetFramework de netstandard1.4 à netstandard1.6

Pour construire un assembly de tâches qui fonctionne à la fois sur "MSBuild.exe" et "dotnet.exe msbuild", vous devez cibler tstandard1.4 ou inférieur. netstandard1.6 n'est pas compatible avec .NET Framework 4.6.1 (sur lequel s'exécute MSBuild.exe)

Si vous avez besoin d'API non disponible dans netstandard1.4, vous devrez compiler votre tâche pour .NET Framework et .NET Standard, qui est considérablement plus complexe mais peut être fait.

+0

J'ai trouvé une solution qui n'implique pas l'obligation de copier les assemblages (que j'aime aussi beaucoup mieux). Mais peut-être que quelqu'un d'autre a un cas d'utilisation valide pour cette réponse. Merci quand même :) – Fionn