🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
.NET Core

.NET Coreは、マネージソフトウェアフレームワークでオープンソースで実装されています。クロスプラットフォームを前提に考えられており、Windows/Mac/Linuxで動くアプリケーションを作成することが可能です。

Q&A

解決済

1回答

3573閲覧

dotnet core で設定ファイルをビルド先にコピーするには

currysita

総合スコア43

.NET Core

.NET Coreは、マネージソフトウェアフレームワークでオープンソースで実装されています。クロスプラットフォームを前提に考えられており、Windows/Mac/Linuxで動くアプリケーションを作成することが可能です。

0グッド

0クリップ

投稿2019/12/13 06:54

dotnet core でbuildした時に、設定ファイルがビルド先にコピーされずに困っています。
どうすれば設定ファイルがコピーされるのでしょうか?
コピーしたい設定ファイルはNLogの設定ファイルで、名前は「NLog.config」です。

dotnet core 3.1.100でサンプルを作成しています。

バージョンを確認すると以下のように表示されますので、バージョンは3.1.100で間違いないと思われます。

console

1>dotnet --version 23.1.100

dotnet new console コマンドでコンソールアプリケーションを作成してあります。
NLogのパッケージを読み込んでおります。
treeコマンドでファイル構成を確認した所、以下のようになりました。

console

1nlog_console_01>tree /F 2 3フォルダー パスの一覧: ボリューム OS 4ボリューム シリアル番号は XXXX-XXXX です 5C:. 6│ NLog.config 7│ nlog_console_01.csproj 8│ Program.cs 910├─bin 11│ └─Debug 12│ └─netcoreapp3.1 13│ NLog.config 14│ NLog.dll 15│ nlog_console_01.deps.json 16│ nlog_console_01.dll 17│ nlog_console_01.exe 18│ nlog_console_01.pdb 19│ nlog_console_01.runtimeconfig.dev.json 20│ nlog_console_01.runtimeconfig.json 2122└─obj 23 │ nlog_console_01.csproj.nuget.cache 24 │ nlog_console_01.csproj.nuget.dgspec.json 25 │ nlog_console_01.csproj.nuget.g.props 26 │ nlog_console_01.csproj.nuget.g.targets 27 │ project.assets.json 2829 └─Debug 30 └─netcoreapp3.1 31 nlog_console_01.AssemblyInfo.cs 32 nlog_console_01.AssemblyInfoInputs.cache 33 nlog_console_01.assets.cache 34 nlog_console_01.csproj.CopyComplete 35 nlog_console_01.csproj.FileListAbsolute.txt 36 nlog_console_01.csprojAssemblyReference.cache 37 nlog_console_01.dll 38 nlog_console_01.exe 39 nlog_console_01.pdb

csprojの中身は以下の通りです。

XML

1<Project Sdk="Microsoft.NET.Sdk"> 2 3 <PropertyGroup> 4 <OutputType>Exe</OutputType> 5 <TargetFramework>netcoreapp3.1</TargetFramework> 6 </PropertyGroup> 7 8 <ItemGroup> 9 <PackageReference Include="nlog" Version="4.6.8" /> 10 <PackageReference Include="NLog.Config" Version="4.6.8" /> 11 </ItemGroup> 12 13</Project>

問題となっているのは、フォルダ直下にある「NLog.config」が、\bin\Debug\netcoreapp3.1\NLog.config にコピーされていない事です。
ファイルは存在しますが、中身が異なっています。

フォルダ直下のNLog.configは以下の通りです。

xml

1<?xml version="1.0" encoding="utf-8" ?> 2<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 4 5 <targets> 6 <target name="logfile" xsi:type="File" fileName="file.txt" /> 7 <target name="logconsole" xsi:type="Console" /> 8 </targets> 9 10 <rules> 11 <logger name="*" minlevel="Info" writeTo="logconsole" /> 12 <logger name="*" minlevel="Debug" writeTo="logfile" /> 13 </rules> 14</nlog>

比べて、\bin\Debug\netcoreapp3.1\NLog.config は以下の通りです。

xml

1<?xml version="1.0" encoding="utf-8" ?> 2<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xsi:schemaLocation="http://www.nlog-project.org/schemas/NLog.xsd NLog.xsd" 5 autoReload="true" 6 throwExceptions="false" 7 internalLogLevel="Off" internalLogFile="c:\temp\nlog-internal.log"> 8 9 <!-- optional, add some variables 10 https://github.com/nlog/NLog/wiki/Configuration-file#variables 11 --> 12 <variable name="myvar" value="myvalue"/> 13 14 <!-- 15 See https://github.com/nlog/nlog/wiki/Configuration-file 16 for information on customizing logging rules and outputs. 17 --> 18 <targets> 19 20 <!-- 21 add your targets here 22 See https://github.com/nlog/NLog/wiki/Targets for possible targets. 23 See https://github.com/nlog/NLog/wiki/Layout-Renderers for the possible layout renderers. 24 --> 25 26 <!-- 27 Write events to a file with the date in the filename. 28 <target xsi:type="File" name="f" fileName="${basedir}/logs/${shortdate}.log" 29 layout="${longdate} ${uppercase:${level}} ${message}" /> 30 --> 31 </targets> 32 33 <rules> 34 <!-- add your logging rules here --> 35 36 <!-- 37 Write all events with minimal level of Debug (So Debug, Info, Warn, Error and Fatal, but not Trace) to "f" 38 <logger name="*" minlevel="Debug" writeTo="f" /> 39 --> 40 </rules> 41</nlog>

恐らく、\bin\Debug\netcoreapp3.1\NLog.config は、NLogパッケージによって自動的に作成されたものと思われます。
これを自作のNLog.configに書き換えたいのですが、今のところは手動でコピーしています。
どうにかしてビルド時に自動的にコピーしてくれるようにはできないでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

csprojファイルのItemGroupに追加する事で対応できました。

XML

1<Project Sdk="Microsoft.NET.Sdk"> 2 3 <PropertyGroup> 4 <OutputType>Exe</OutputType> 5 <TargetFramework>netcoreapp3.1</TargetFramework> 6 </PropertyGroup> 7 8 <ItemGroup> 9 <PackageReference Include="nlog" Version="4.6.8" /> 10 <PackageReference Include="NLog.Config" Version="4.6.8" /> 11 <None Update="NLog.config" CopyToOutputDirectory="Always" /> 12 </ItemGroup> 13 14</Project>

ItemGroupには全てのリソースを含める必要があるという事が、以下のページに書かれていました。
https://docs.microsoft.com/ja-jp/dotnet/core/tools/csproj

Noneの説明については、以下を参考にしました。
https://stackoverflow.com/questions/44374074/copy-files-to-output-directory-using-csproj-dotnetcore
https://docs.microsoft.com/en-us/visualstudio/msbuild/common-msbuild-project-items?view=vs-2019

NoneなどItem系のタグの属性については以下を参考にしました。
https://docs.microsoft.com/ja-jp/visualstudio/msbuild/item-element-msbuild?view=vs-2019

投稿2019/12/13 07:49

currysita

総合スコア43

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問