2017-01-03 1 views
0

Der während des Builds angezeigte Fehler: Fehler MSB4102: Der Wert "" des Attributs "Project" im Element ist ungültig. Parameter "Pfad" darf keine Länge von Null haben.Visual Studio 2017, Service Fabric-Projekt, Sdk-Ziele: Fehler beim Packen des SF-Projekts

Die Reproduktion Schritte sind einfach: VS 2017 RC 2. Erstellen Sie neue Service Fabric Application Ausrichtung ASP.Net Core mit Web-API. Versuchen Sie dann, das Service Fabric-Projekt zu packen.

Ich vermute, dass es einen Fehler in Microsoft.VisualStudio.Azure.Fabric.ApplicationProject.targets gibt, der Teil von VS 2017 ist. Der, der in diesem Verzeichnis befindet: C: \ Programme (x86) \ Microsoft Visual Studio \ 2017 \ Professional \ MSBuild \ Microsoft \ VisualStudio \ v15.0 \ Dienst Fabric Tools

In der SDK-Zieldatei gibt es diese Anweisung.

<PropertyGroup Condition="'$(LanguageTargets)' == ''"> 
    <LanguageTargets Condition="'$(MSBuildProjectExtension)' == '.csproj'">$(MSBuildToolsPath)\Microsoft.CSharp.targets</LanguageTargets> 
    <LanguageTargets Condition="'$(MSBuildProjectExtension)' == '.vbproj'">$(MSBuildToolsPath)\Microsoft.VisualBasic.targets</LanguageTargets> 
    </PropertyGroup> 

    <!-- TODO: Generate error if LanguageTargets property isn't set here. This would happen, for example if an .fsproj referenced the .NET Sdk 
       but not the FSharp one. See https://github.com/dotnet/sdk/issues/448 --> 
    <Import Project="$(LanguageTargets)"/> 

Ein wenig schwer zu entziffern, wenn Sie nicht daran gewöhnt sind. Aber. Im Wesentlichen heißt es, wenn ein .csproj die CSharp-Ziele lädt, wenn es ein .vbproj ist, laden die VB-Ziele, wenn beide nichts tun. Dann versucht die nächste Zeile, die angegebenen Ziele zu importieren.

Im Fall eines Service Fabric-Projekts ist dies ein .sfproj, was bedeutet, dass LanguageTargets leer ist und wir den Fehler oben in diesem Beitrag erhalten. Die SF-Zieldatei sollte LanguageTargets festlegen, denke ich, bevor sie diese Zeile erreicht.

Ich vermute, dass diese sdk.targets-Datei eine Standardvorlage ist, die noch nicht für die Verarbeitung von VS-2017-Fabric-Projekten aktualisiert wurde.

Mögliche Antwort, aber ich mag nicht die Idee der Bearbeitung der Sdk.targets-Datei von VS installiert. Eine Änderung dieser Linie in Sdk.targets wird nach diesem Fehler und verursacht keine weiteren Fehler im Build:

Antwort

2

Von: Matt Thalman bei [https://social.msdn.microsoft.com/Forums/en-US/19fd8e9c-a517-4361-b50d-656d679d9c8b/visual-studio-2017-service-fabric-project-sdk-targets-error-when-packaging-sf-project?forum=AzureServiceFabric]

Dieses Problem sollte in der neuesten Version von behoben werden VS 2017 RC. Stellen Sie sicher, dass Sie die neueste Version ausführen.

Aber selbst mit der neuesten Version ist es möglich, dass Sie dieses Problem in Fällen sehen können, in denen VS oder eine bestimmte automatisierte Logik das Microsoft.VisualStudio.Azure.Fabric.MSBuild.1.4.0 NuGet-Paket heruntergeladen hat und nicht das Paket, das in der Box versendet wird. Die Version des NuGet-Pakets, das in der Box mit VS 2017 RC ausgeliefert wird, enthält das Update für dieses Problem. Aber das NuGet-Paket Microsoft.VisualStudio.Azure.Fabric.MSBuild.1.4.0, das in NuGet.org vorhanden ist, enthält das Update nicht. Derzeit gibt es ein Update für das NuGet-Paket (Version 1.4.1), das ein Update enthält, das zwar existiert, aber nicht aufgelistet ist. Wenn Sie dieses aktualisierte Paket verwenden müssen, müssen Sie einige manuelle Änderungen an Ihrem Service Fabric-Anwendungsprojekt vornehmen:

Aktualisieren Sie die Datei packages.config so, dass sie auf Version 1.4.1 von Microsoft verweist. VisualStudio.Azure.Fabric.MSBuild-Paket. Aktualisieren Sie Ihre .sfproj-Datei, indem Sie Instanzen von "Microsoft.VisualStudio.Azure.Fabric.MSBuild.1.4.0" durch "Microsoft.VisualStudio.Azure.Fabric.MSBuild.1.4.1" ersetzen. Normalerweise aktualisiert NuGet die Projektdatei automatisch für Sie, wenn Sie die NuGet-Paketversion aktualisieren. Aufgrund eines Problems, das NuGet mit dem Projekttyp Service-Anwendung hat, werden diese Aktualisierungen jedoch nicht automatisch ausgeführt, weshalb Sie diese vornehmen müssen ändert sich manuell (und auch warum das Paket in NuGet.org als nicht gelistet definiert ist).