"Resolví" (trabajo creado alrededor) esto de una manera más simple.
En la compilación posterior
dotnet publish "$(ProjectFileName)" --no-build -o pub
xcopy "$(ProjectDir)pub\3rdPartyProvider.*.dll" "$(OutDir)"
pub es la carpeta donde desea que se coloquen las cosas publicadas
NOTA: dependiendo de la versión dotnet.exeque utilice, es --no-buildposible que el comando no esté disponible.
Por ejemplo, no disponible en v2.0.3; y disponible en v2.1.402. Sé que VS2017 Update4 tenía v2.0.3. Y Update8 tiene 2.1.x
Actualizar:
La configuración anterior funcionará en el entorno de depuración básico, pero para ponerla en el entorno de producción / servidor de compilación se necesita más. En este ejemplo en particular que tuve que resolver, lo construimos Release|x64y por Release|x86separado. Así que contabilicé ambos. Pero para admitir el dotnet publishcomando de compilación posterior , primero agregué RuntimeIdentifieral archivo del proyecto.
<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>
¿Por qué lo necesitaba y por qué puedes escapar sin él? Necesitaba esto porque mi programa de compilación está configurado para interceptar la advertencia MSB3270 y fallar la compilación si aparece. Esta advertencia dice, "oye, algunos archivos de tus dependencias tienen un formato incorrecto". ¿Pero recuerdas el objetivo de este ejercicio? Necesitamos extraer las DLL de dependencia de paquetes. Y en muchos casos no importa si esta advertencia está ahí porque la siguiente compilación posterior no importa. Una vez más, este es mi programa de construcción que se preocupa. Entonces, solo agregué RuntimeIdentifiera 2 configuraciones que uso durante la compilación de producción.
Construcción de publicación completa
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
Explicación: dotnet publish está buscando obj\Debugo obj\Release. No lo tenemos durante la compilación porque la compilación crea obj\x64\Releaseo obj\x86\Release. Las líneas 1 y 2 mitigan este problema. En la línea 3 le digo dotnet.exeque use una configuración específica y un tiempo de ejecución de destino. De lo contrario, cuando este es el modo de depuración, no me importan las advertencias ni las cosas en tiempo de ejecución. Y en la última línea, simplemente tomo mis dlls y los copio en la carpeta de salida. Trabajo hecho.
dotnet publishsería un truco? Incluya el comando en su archivo csproj como un script de compilación posterior.