テンプレートテスト
ブログの説明
ブログの説明2
menu
keyboard_arrow_up
Top
search
close
home
ホーム
computer
PC一般
construction
開発環境・ツール
code
プログラミング
home
ホーム
computer
PC一般
construction
開発環境・ツール
code
プログラミング
ラベル
.NET Standard
の投稿を表示しています。
すべての投稿を表示
ラベル
.NET Standard
の投稿を表示しています。
すべての投稿を表示
2020/10/08
image
NO IMAGE
外部 DLL を NuGet パッケージに含める方法
update
event_note
label
.NET Core
label
.NET Standard
label
Visual Studio
C/C++ で作成された外部の DLL を C# から扱うためのラッパーを作成して NuGet パッケージとして公開しようとしていたのですが、その外部 DLL 自体も NuGet パッケージに含める方法について調べてみました。
## 環境 - Visual Studio 2017 - .NET Core 2.2 ## 方法 ググってみるとまさにそのものが書いてある以下のページが見つかりました。 - https://blog.okazuki.jp/entry/2019/09/28/145646 しかし、これだけではいろいろはまったので、追記・補足しておきます。 ### PackagePath について 出力先となる `PackagePath` のディレクトリ名には `lib` を指定する必要があるようです。 指定しなかった場合、以下の警告が表示されました。 > warning NU5100: The assembly 'foo.dll' is not inside the 'lib' folder and hence it won't be added as a reference when the package is installed into a project. Move it into the 'lib' folder if it needs to be referenced. さらに、`lib` だけだと以下のエラーが表示されました。 > warning NU5103: The folder 'lib/foo.dll' under 'lib' is not recognized as a valid framework name or a supported culture identifier. Rename it to a valid framework name or culture identifier. `lib` の下にはフレームワーク名またはカルチャー名のディレクトリを指定する必要があるみたいです。 ```xml
``` また、 このフレームワーク名またはカルチャー名以下の階層が、作成した DLL と同じ階層に作られるようです。 例えば、作成した DLL が `sample.dll` だとして、外部の DLL を以下のように設定してパッケージに含めた場合、 ```
``` NuGet パッケージインストール後の配置は以下のようになります。 - sample.dll - foo\x64\foo.dll - foo\x86\foo.dll ### 外部 DLL を出力ディレクトリにコピー 外部 DLL を出力ディレクトリにコピーするには、Visual Studio で該当の DLL を右クリックし、`出力ディレクトリにコピー` の項目を `新しい場合はコピーする` (または `常にコピーする`) に設定しておく必要があります。 手動で `.csproj` ファイルを修正する場合は以下を追加します。 ```xml
PreserveNewest
``` ### publish 時に出力先ディレクトリに外部 DLL がコピーされない この外部 DLL を含んだ NuGet パッケージを使っているアプリケーションにおいて、`dotnet publish` コマンドを実行しても外部 DLL が出力先の `publish` ディレクトリにコピーされませんでした。 `publish` 時に出力ディレクトリに外部 DLL をコピーするためには、まずライブラリ側(NuGet パッケージにするほう)の `.csproj` ファイルに以下を追加します。 ```xml
true
``` しかし、これを `PackagePath` で `lib` を指定している箇所に指定しても上手くいきませんでした。 `PackagePath` を指定しなかった場合、該当のファイルはコンテンツとして追加されるようなので、そこに `PackageCopyToOutput` を設定すると上手くいきました。 具体的には以下のような感じです。 ```
true
true
``` これが一番はまりました。 ## 最終的に作成した設定 上記を踏まえ、最終的に `.csproj` ファイルの設定は以下のようになりました。 ```
true
PreserveNewest
true
PreserveNewest
```
## 参考 URL - https://blog.okazuki.jp/entry/2019/09/28/145646 - https://docs.microsoft.com/ja-jp/nuget/reference/msbuild-targets - https://docs.microsoft.com/ja-jp/nuget/consume-packages/package-references-in-project-files - https://stackoverflow.com/questions/42862739/how-to-copy-files-to-output-directory-from-a-referenced-nuget-package-in-net-co - https://docs.microsoft.com/ja-jp/nuget/reference/nuspec
Read more
2018/08/30
依存している dll が出力フォルダにコピーされない
update
event_note
label
.NET Framework
label
.NET Standard
label
Visual Studio
.NET Framework で作成しているアプリケーションで、.NET Standard で作成されたライブラリを参照している場合、依存している dll が出力フォルダにコピーされませんでした。
## 環境 - Visual Studio 2017 - .NET Framework 4.6.1 - .NET Standard 2.0 ## 依存関係 まず、説明の都合上以下のように定義します。 - .NET Framework で作成したアプリケーションを **A** とする - .NET Standard で作成したライブラリを **B** とする - その .NET Standard で作成されたライブラリが依存している他の dll などを **C** とする 依存関係は A -> B -> C のようになります。 このとき、A をビルドすると、出力フォルダに B の dll はコピーされるのですが、C の dll がコピーされないという状況になりました。 ## 原因と解決策 NuGet のパッケージ管理には `packages.config` 形式と、`PackageReference` 形式があるようです。 `packages.config` 形式だと今回のような現象が起こるようで、`PackageReference` 形式に移行すれば解決します。 - https://docs.microsoft.com/ja-jp/nuget/reference/migrate-packages-config-to-package-reference 尚、.NET Core で新規にプロジェクトを作成した場合は `PackageReference` 形式になるようなので、今回のような問題は発生しません。 ## 移行方法 Visual Studio で `packages.config` から `PackageReference` へマイグレーションすることができます。 ソリューションファイルを開き、プロジェクト内の `packages.config` を右クリックします。 `Migrate packages.config to PackageReference...` を選択するとマイグレーションの画面が表示されるので、OK を押すとマイグレーションが実行されます。
`Migrate packages.config to PackageReference...` のメニューが表示されない場合は、Visual Studio の設定を見直してみてください。 NuGet のデフォルトのパッケージ管理方式が `PackageReference` になっているとマイグレーションのメニューは表示されないようなので、`packages.config` に変更してください。
尚、stackoverflow では .NET Framework で作成したアプリケーションのプロジェクトファイル (.csproj) を開き、`PropertyGroup` に以下を追加すれば OK というのがありました。 ```
PackageReference
``` しかし、この場合 `package.config` で管理しているパッケージが未インストールされていない状態になるので、既に `package.config` が存在する場合はマイグレーションを行ったほうが良いと思います。
## 参考 URL - https://docs.microsoft.com/ja-jp/nuget/reference/migrate-packages-config-to-package-reference - https://github.com/NuGet/docs.microsoft.com-nuget/issues/905 - https://stackoverflow.com/questions/51155274/copy-all-dependencies-from-net-standard-libraries-to-net-framework-console-app
Read more
前の投稿
ホーム
Translate
Popular Posts
ASP.NET Core で AdminLTE を使用する
TortoiseGit でコミットメッセージを変更する
image
NO IMAGE
TestLink で LDAP 認証を行う
image
NO IMAGE
[C#] Dictionary の キーがタプルの場合に JSON へのシリアライズとデシリアライズを行う方法
TortoiseGit でリモートリポジトリのタグを削除する
image
NO IMAGE
[C#] SonarQube で .NET アプリケーションのコード解析を行う
GitLab をアップグレードしたら Redmine へのリンクが解除された
image
NO IMAGE
ASP.NET Core (.NET Core) でバックグランドタスクを起動する
GitBucketのrootのパスワードを忘れたので再設定する
image
NO IMAGE
TortoiseGit のコンテキストメニューが消える
Labels
.NET Core
31
.NET Framework
17
.NET Standard
2
AdminLTE
1
Apache
3
AppVeyor
2
AsciiDoc
3
ASP.NET Core
55
Atom
4
AWS
2
AWS Cloud9
4
blockdiag
1
Blogger
10
Bootstrap
3
C/C++
6
C#
106
CentOS
3
Chrome
1
Chronograf
3
Codecov
1
CSS
1
Docker
28
DokuWiki
4
Doxygen
1
draw.io
1
Electron.NET
2
Entity Framework Core
9
Excel
2
FFmpeg
2
Firefox
5
Git
12
GitBook
4
GitBucket
7
GitHub
7
GitLab
30
Go
1
Google
1
Google Cloud Platform
1
Grafana
5
HTML
5
IIS
8
InfluxDB
6
JavaScript
7
Jenkins
7
Linux
25
Log4View
1
MahApps.Metro
3
MaterialDesignInXamlToolkit
1
MVC
1
MVVM
6
NLog
3
Node.js
3
npm
1
OpenSSL
3
ownCloud
2
Pine Script
1
PlantUML
5
PowerShell
7
Prism
2
Python
11
Razor
3
Redmine
30
remark.js
2
rocketchat
4
Ruby
3
SignalR
1
Socket.IO
1
SonarQube
5
Sphinx
10
SQL Server
5
SQLite
1
t
1
TestLink
2
Tomcat
2
TortoiseGit
10
TortoiseSVN
2
Trading View
1
Travis CI
1
Ubuntu
13
Visual Studio
39
Visual Studio Code
9
Vue.js
8
Windows
56
Windows 10
4
Windows ADK
1
Windows API
2
Windows Embedded
4
wkhtmltopdf
2
Word
3
WPF
12
WSL
1
Xamarin
1
xUnit
5
アプリケーション
1
デザインパターン
1
テスト
3
バッチファイル
2
ぴよ
3
プログラミング
3
ライセンス
1
ラベル
3
ラベル1
2
英語
2
雑記
1
書籍
1
数学
1
正規表現
1
Blog Archive
▼
2022
(1)
▼
2月
(1)
例えばボタンをクリックしたときに重い処理を実行する場合など、そのまま処理すると GUI が固まって...
►
2021
(24)
►
5月
(7)
►
4月
(8)
►
3月
(2)
►
2月
(2)
►
1月
(5)
►
2020
(60)
►
12月
(1)
►
11月
(3)
►
10月
(3)
►
9月
(3)
►
8月
(3)
►
7月
(7)
►
6月
(7)
►
5月
(2)
►
4月
(6)
►
3月
(6)
►
2月
(7)
►
1月
(12)
►
2019
(92)
►
12月
(13)
►
11月
(9)
►
10月
(3)
►
9月
(2)
►
8月
(3)
►
7月
(5)
►
6月
(11)
►
5月
(6)
►
4月
(17)
►
3月
(9)
►
2月
(6)
►
1月
(8)
►
2018
(100)
►
12月
(1)
►
11月
(11)
►
10月
(8)
►
9月
(6)
►
8月
(10)
►
7月
(10)
►
6月
(8)
►
5月
(9)
►
4月
(8)
►
3月
(14)
►
2月
(4)
►
1月
(11)
►
2017
(117)
►
12月
(14)
►
11月
(20)
►
10月
(17)
►
9月
(19)
►
8月
(10)
►
7月
(8)
►
6月
(3)
►
5月
(6)
►
4月
(5)
►
3月
(2)
►
2月
(8)
►
1月
(5)
►
2016
(91)
►
12月
(5)
►
11月
(9)
►
10月
(11)
►
9月
(9)
►
8月
(6)
►
7月
(14)
►
6月
(14)
►
5月
(11)
►
4月
(10)
►
3月
(2)
►
2015
(23)
►
12月
(4)
►
11月
(2)
►
10月
(8)
►
9月
(8)
►
7月
(1)
►
2013
(3)
►
11月
(1)
►
9月
(1)
►
7月
(1)
►
2012
(2)
►
7月
(1)
►
6月
(1)
►
2011
(1)
►
9月
(1)
►
2009
(1)
►
7月
(1)
►
2008
(2)
►
11月
(1)
►
7月
(1)
►
2007
(3)
►
10月
(3)