前回、Nugetパッケージからいくつかのファイルを抽出する方法を見つける必要があったので、少なくとも6か月かかりましたが、ようやく解決策を見つけることができました。
重要なのは、このソリューションは、.nupkg
ファイルがあることを前提としており.targets
、抽出プロセスを実行するためにファイルを手動で追加することです。
今、物事は異なります:
.nupgk
ファイルがありませんdotnet pack
。コマンドを使用して、VSTSサーバー上でファイルを自動的に生成します。次に、Nugetサーバーからパッケージを使用しますこれが私の ProjectName.csproj
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<RestoreProjectStyle>PackageReference</RestoreProjectStyle>
<Authors>Jérôme MEVEL</Authors>
<Version>1.0.3</Version>
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
<!-- This answer got many votes on a Github thread so I tried just in case -->
<CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
<!-- Just trying that too-->
<IncludeBuildOutput>true</IncludeBuildOutput>
<IncludeContentInPack>true</IncludeContentInPack>
<!-- I wanted to see the full generated Nuget package -->
<IncludeSource>true</IncludeSource>
<!-- desperate attempt -->
<TargetsForTfmSpecificBuildOutput>GetMyPackageFiles</TargetsForTfmSpecificBuildOutput>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Dapper" Version="1.50.5" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="2.1.1" />
<PackageReference Include="Microsoft.Extensions.Logging" Version="2.1.1" />
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="2.1.1" />
<PackageReference Include="NLog" Version="4.5.8">
<!-- Let's try this too just in case-->
<IncludeAssets>all</IncludeAssets>
</PackageReference>
<PackageReference Include="NLog.Extensions.Logging" Version="1.2.1">
<IncludeAssets>all</IncludeAssets>
</PackageReference>
<PackageReference Include="NLog.Web.AspNetCore" Version="4.6.0">
<IncludeAssets>all</IncludeAssets>
</PackageReference>
<PackageReference Include="System.Data.Common" Version="4.3.0" />
<PackageReference Include="System.Data.SqlClient" Version="4.5.1" />
</ItemGroup>
<ItemGroup>
<!-- Added the file to the root folder in case <IncludeAssets>all</IncludeAssets> is looking there -->
<Content Include="NLog.config">
<Pack>true</Pack>
<PackagePath>NLog;;</PackagePath>
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<!-- My desired path to look for the file -->
<Content Include="NLog\NLog.config">
<Pack>true</Pack>
<PackagePath>NLog;;</PackagePath>
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
</ItemGroup>
<!-- This is the default setting, perfectly working when I reference the project instead of installing the Nuget package -->
<ItemGroup>
<None Update="NLog\NLog.config">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
</ItemGroup>
<!-- desperate attempt -->
<Target Name="GetMyPackageFiles">
<ItemGroup>
<BuildOutputInPackage Include="NLog/Nlog.config">
<TargetPath>NLog</TargetPath>
</BuildOutputInPackage>
</ItemGroup>
</Target>
</Project>
ご覧のとおり、私はいくつかの異なる設定を試しました。このMsBuildにより、NugetパッケージファイルのルートNLog.config
にあるNLog
フォルダーにファイルが含まれるようになります。
さまざまな試行中に、設定した構成に応じて、で、またはでさえNLog.config
ファイルを作成することができsrc/ProjectName.Logging/NLog/NLog.config
ましたlib/netstandard2.0/Nlog.config
。
したがって、私のファイルは間違いなくNugetパッケージファイルに含まれていますが、パッケージを使用するプロジェクトの出力ディレクトリにはコピーされません。
ここで説明.nuspec
するdotnet pack
ようにパッケージを生成するときにファイルを指定しようとしましたが、目的の結果を得ることができませんでした(自分だけがNugetパッケージに含まれているか、すべてのソースファイルに含まれていました)。さらに、これには、ファイル内の構成をオーバーライドしたり、無駄な複雑さを追加したりするなど、いくつかの欠点があります。私が達成したいことは、ファイルを使用せずに実行できると思います(おそらく私は間違っています)。NLog.config
.csproj
.nuspec
build/ProjectName.targets
パッケージにファイルがないことに気づきました。これはおそらく不足している部分です。では.targets
、パッケージを手動で変更せずにこのファイルを追加するにはどうすればよいですか?
設定ファイルをNugetパッケージから出力ディレクトリにコピーする別の方法はありますか?
誰かが私がこの問題を解決するのを手伝ってくれることを本当に望んでいます。同じ操作をしたいのは2回目ですが、少し違いがあり、また難しいです。
どうもありがとう
ここで説明するようにファイル.nuspec
からnugetを作成すると、ファイルなしでファイルをコピーすることができます。.csproj
また、ファイルをnugetから出力ディレクトリにコピーするにはProjectName.targets
、次の内容のファイルを作成します。
<ItemGroup>
<LogFiles Include="$(MSBuildThisFileDirectory)\..\contentFiles\LogFiles\*.config" />
</ItemGroup>
<Target Name="CopyLogFiles" BeforeTargets="Build">
<Copy SourceFiles="@(LogFiles)" DestinationFolder="$(TargetDir)CopiedLogFiles\" />
</Target>
あなたの中.csproj
のファイルの追加:
<ItemGroup Label="FilesToCopy">
<Content Include="ProjectName.targets" PackagePath="build/ProjectName.targets" />
<Content Include="LogFiles\*.config" Pack="true" PackagePath="contentFiles\LogFiles">
<PackageCopyToOutput>true</PackageCopyToOutput>
</Content>
</ItemGroup>
もちろん、パスと名前は自由に選択できます。
これ.config
により、すべてのファイルCopiedLogFiles
が出力ディレクトリで呼び出されるフォルダにコピーされます。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加