„Rozwiązałem” to (stworzyłem obejście) w prostszy sposób.
W budowaniu postu
dotnet publish "$(ProjectFileName)" --no-build -o pub
xcopy "$(ProjectDir)pub\3rdPartyProvider.*.dll" "$(OutDir)"
pub jest folderem, w którym chcesz umieścić swoje opublikowane rzeczy na postoju
UWAGA: w zależności od używanej wersji dotnet.exe, polecenie--no-build może nie być dostępne.
Na przykład niedostępne w wersji 2.0.3; i dostępny w wersji 2.1.402. Wiem, że VS2017 Update4 miał v2.0.3. A Update8 ma 2.1.x
Aktualizacja:
Powyższa konfiguracja będzie działać w podstawowym środowisku debugowania, ale aby umieścić ją w środowisku serwera kompilacji / środowisku produkcyjnym, potrzeba więcej. W tym konkretnym przykładzie, który musiałem rozwiązać, budujemy Release|x64i Release|x86osobno. Więc rozliczyłem się z obu. Aby jednak obsługiwać polecenie po kompilacji dotnet publish, najpierw dodałem RuntimeIdentifierdo pliku projektu.
<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>
Dlaczego tego potrzebowałem i dlaczego możesz się bez niego obejść? Potrzebowałem tego, ponieważ mój program kompilacji jest ustawiony na przechwytywanie ostrzeżenia MSB3270 i niepowodzenie kompilacji, jeśli się pojawi. To ostrzeżenie mówi: „Hej, niektóre pliki w Twoich zależnościach mają niewłaściwy format”. Ale czy pamiętasz cel tego ćwiczenia? Musimy pobrać biblioteki DLL zależności pakietów. W wielu przypadkach nie ma znaczenia, czy jest to ostrzeżenie, ponieważ po kompilacji nie obchodzi. Ponownie, to jest mój program do kompilacji, który dba. Więc dodałem tylko RuntimeIdentifier2 konfiguracje, których używam podczas kompilacji produkcyjnej.
Pełna kompilacja postu
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
Objaśnienie: dotnet Publishing wyszukuje obj\Debuglub obj\Release. Nie mamy tego podczas kompilacji, ponieważ build tworzy obj\x64\Releaselub obj\x86\Release. Wiersze 1 i 2 łagodzą ten problem. W linii 3 mówię, dotnet.exeaby użyć określonej konfiguracji i docelowego środowiska wykonawczego. W przeciwnym razie, gdy jest to tryb debugowania, nie obchodzą mnie rzeczy i ostrzeżenia w czasie wykonywania. W ostatniej linii po prostu pobieram moje biblioteki dll i kopiuję je do folderu wyjściowego. Zadanie wykonane.
dotnet publishbyć włamaniem? Dołącz polecenie do pliku csproj jako skrypt po kompilacji.