Ich habe dies auf einfachere Weise "gelöst" (umgangen).
In Post Build
dotnet publish "$(ProjectFileName)" --no-build -o pub
xcopy "$(ProjectDir)pub\3rdPartyProvider.*.dll" "$(OutDir)"
pub
ist der Ordner, in dem Ihre veröffentlichten Inhalte bereitgestellt werden sollen
HINWEIS: Je nachdem, welche Version dotnet.exe
Sie verwenden, ist der Befehl --no-build
möglicherweise nicht verfügbar.
Zum Beispiel nicht verfügbar in v2.0.3; und verfügbar in v2.1.402. Ich weiß, dass VS2017 Update4 v2.0.3 hatte. Und Update8 hat 2.1.x.
Aktualisieren:
Das obige Setup funktioniert in der Basis-Debug-Umgebung, aber um es in die Build-Server- / Produktionsumgebung zu integrieren, ist mehr erforderlich. In diesem speziellen Beispiel, das ich lösen musste, bauen wir Release|x64
und Release|x86
getrennt. Also habe ich beides erklärt. Um den Post-Build- dotnet publish
Befehl zu unterstützen, habe ich zuerst eine RuntimeIdentifier
Projektdatei hinzugefügt .
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<OutputPath>..\..\lib\</OutputPath>
<RuntimeIdentifier>win-x64</RuntimeIdentifier>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x86'">
<OutputPath>..\..\lib\</OutputPath>
<RuntimeIdentifier>win-x86</RuntimeIdentifier>
</PropertyGroup>
Warum brauchte ich es und warum kannst du ohne es davonkommen? Ich brauchte dies, weil mein Build-Programm so eingestellt ist, dass es die Warnung MSB3270 abfängt und den Build fehlschlägt, wenn er angezeigt wird. Diese Warnung lautet: "Hey, einige Dateien in Ihren Abhängigkeiten haben ein falsches Format." Aber erinnern Sie sich an das Ziel dieser Übung? Wir müssen Paketabhängigkeits-DLLs ziehen. In vielen Fällen spielt es keine Rolle, ob diese Warnung vorhanden ist, da es nicht wichtig ist, dem Post-Build zu folgen. Auch dies ist mein Build-Programm, das sich interessiert. Daher habe ich nur RuntimeIdentifier
2 Konfigurationen hinzugefügt , die ich während des Produktionsaufbaus verwende.
Vollständiger Post-Build
if not exist "$(ProjectDir)obj\$(ConfigurationName)" mkdir "$(ProjectDir)obj\$(ConfigurationName)"
xcopy "$(ProjectDir)obj\$(PlatformName)\$(ConfigurationName)" "$(ProjectDir)obj\$(ConfigurationName)" /E /R /Y
if $(ConfigurationName) == Release (
dotnet publish "$(ProjectFileName)" --runtime win-$(PlatformName) --no-build -c $(ConfigurationName) -o pub --no-restore --no-dependencies
) else (
dotnet publish "$(ProjectFileName)" --no-build -c $(ConfigurationName) -o pub --no-restore --no-dependencies
)
xcopy "$(ProjectDir)pub\my3rdPartyCompany.*.dll" "$(OutDir)" /Y /R
Erläuterung: dotnet Publish sucht nach obj\Debug
oder obj\Release
. Wir haben es nicht während des Builds, weil Build erstellt obj\x64\Release
oder obj\x86\Release
. Zeile 1 und 2 mindern dieses Problem. In Zeile 3 fordere ich Sie dotnet.exe
auf, eine bestimmte Konfiguration und Ziellaufzeit zu verwenden. Andernfalls, wenn dies der Debug-Modus ist, interessieren mich Laufzeitsachen und Warnungen nicht. Und in der letzten Zeile nehme ich einfach meine DLLs und kopiere sie dann in den Ausgabeordner. Job erledigt.
dotnet publish
ein Hack sein? Fügen Sie den Befehl als Post-Build-Skript in Ihre csproj-Datei ein.