Bunu daha basit bir şekilde "çözdüm" (geçici bir çalışma yarattım).
Post yapıda
dotnet publish "$(ProjectFileName)" --no-build -o pub
xcopy "$(ProjectDir)pub\3rdPartyProvider.*.dll" "$(OutDir)"
pub yayınlanan içeriklerinizin hazırlanmasını istediğiniz klasördür
NOT: Kullandığınız versiyona bağlı olarak dotnet.exekomut --no-buildkullanılamayabilir.
Örneğin, v2.0.3'te mevcut değildir; ve v2.1.402'de mevcuttur. VS2017 Update4'ün v2.0.3'e sahip olduğunu biliyorum. Güncelleme8'de 2.1.x var
Güncelleme:
Yukarıdaki kurulum, temel hata ayıklama ortamında çalışacaktır, ancak bunu sunucu / üretim ortamına yerleştirmek için daha fazlasına ihtiyaç vardır. Ben çözmek zorunda olduğu bu özel örnekte, inşa Release|x64ve Release|x86ayrı ayrı. Bu yüzden ikisini de hesaba kattım. Ancak post build dotnet publishkomutunu desteklemek için önce RuntimeIdentifierproje dosyasına ekledim .
<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>
Neden buna ihtiyacım vardı ve neden onsuz kurtulabilirsin? Çünkü bu gerekli benim yapı programı yolunu kesmek uyarı olarak ayarlanır MSB3270 ve görünürse yapı başarısız. Bu uyarı, "bağımlılıklarınızdaki bazı dosyalar yanlış formatta" diyor. Ama bu egzersizin amacını hatırlıyor musunuz? Paket bağımlılık DLL'lerini çekmemiz gerekiyor. Ve çoğu durumda, bu uyarının orada olup olmadığı önemli değildir, çünkü sonraki derleme sonrası bunu önemsemez. Yine, bu benim derleme programım. Bu nedenle, yalnızca RuntimeIdentifierüretim derlemesi sırasında kullandığım 2 yapılandırmaya ekledim .
Tam Gönderi yapısı
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
Açıklama: dotnet publish obj\Debugveya arıyor obj\Release. Oluşturma sırasında buna sahip değiliz çünkü build obj\x64\Releaseveya obj\x86\Release. Satır 1 ve 2 bu sorunu hafifletir. 3. satırda, dotnet.exebelirli bir yapılandırma ve hedef çalışma zamanı kullanmayı söylüyorum . Aksi takdirde, bu hata ayıklama modu olduğunda, çalışma zamanı işleri ve uyarıları umursamıyorum. Ve son satırda dll'lerimi alıp çıktı klasörüne kopyalıyorum. İş bitmiş.
dotnet publishbir hack olsun? Komutu, derleme sonrası komut dosyası olarak csproj dosyanıza ekleyin.