私はまだ.NETについてあまり知らないので、明らかな何かを見逃していると思います。
ライブラリを作成し(.NET標準2.0用に設定されたdllをターゲットとする)、dllとnugetパッケージの両方としてパッケージ化しました。ここで、ASP.NET Core 2.0上の別のプロジェクトでライブラリを使用します。どうすればいいですか?
現在、Linux VMを使用しているため、VS Codeを使用しています。そのため、Visual Studioを完全に使用せずに何らかのソリューションを選択したいと思います。完全なVisual Studioを使用していくつかのソリューションを試しましたが、参照エクスプローラーがどこにも見つからなかったため、それはうまくいきませんでした。
Csprojファイルでライブラリを参照する必要があります
空のcsprojファイルは次のようになります。
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp1.1</TargetFramework>
</PropertyGroup>
</Project>
これで、2種類の参照を作成できます
プロジェクトリファレンス-ソリューションでクラスライブラリとして機能するプロジェクトがあり、直接参照したい場合
<ProjectReference Include="..\..\src\mylib.csproj" />
パッケージリファレンス-NuGetパッケージへのリンクがあります
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="1.1.2" />
Csprojファイル内では、参照は「ItemGroup」ブロック内にある必要があり、各参照タイプには独自の「ItemGroup」が必要です
これは、いくつかのパッケージ参照といくつかのプロジェクト参照を持つcsprojファイルの例です
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netcoreapp1.1</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Autofac.Extensions.DependencyInjection" Version="4.1.0" />
<PackageReference Include="Microsoft.AspNetCore" Version="1.1.1" />
<PackageReference Include="Microsoft.AspNetCore.Mvc" Version="1.1.2" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.0.0" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="1.1.2" />
<PackageReference Include="Microsoft.EntityFrameworkCore.InMemory" Version="1.1.2" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="1.1.2" />
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="1.1.2" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="1.0.1" />
<PackageReference Include="xunit" Version="2.2.0" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.2.0" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\src\mylib.csproj" />
<ProjectReference Include="..\..\src\mylib2.csproj" />
</ItemGroup>
</Project>
多くの人が次の2つのソリューションのいずれかを推奨しています。
1)ライブラリをソリューションフォルダーにコピーします。
cp -r foo/foo ./foo
dotnet sln add foo/foo.csproj
cd bar
dotnet add reference ../foo/foo.csproj
これはひどい解決策です。
これをしないでください(つまり、使用するたびにライブラリコードをコピーして貼り付けてください。明らかな理由から悪いです)。
2)ローカルnugetリポジトリをセットアップし、ライブラリをローカルリポジトリにコピーして追加します。
nuget add -name "Local" -source /home/doug/packages
nuget add ~/foo/foo.nupkg -source /home/doug/packages
次に、パッケージをインストールします。
cd bar
dotnet add package foo
これは許容できる解決策ですが、ライブラリ(foo)でアクティブに作業している場合、-source
パスはabsoluteでなければならないため、ワークフローは非常にイライラします。
-
dotnet add package with local package file を参照することをお勧めします。これは、操作したいカスタムnupkgファイルのローカルキャッシュを保持する方法を説明しています。
基本的に、これをソリューションフォルダーにドロップするだけです。
NuGet.Config
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<packageSources>
<add key="local" value="./packages" />
</packageSources>
</configuration>
(./packagesはrelativeパスであり、まったく異なるマシンまたはOSでプロジェクトをチェックアウトしても機能することに注意してください)
dotnet add package X
を呼び出すと、./packages/
フォルダーでx.nupkgというファイルも検索します。
カスタムローカルライブラリを使用する場合、必要なことは次のとおりです。
cp ~/foo/foo.nupkg ./packages
cd bar
dotnet add package foo
<3
(注:デフォルトでは、nugetは.nupkgファイルを〜/ .nugetにキャッシュし、dotnet add package X
、even ifを呼び出した場合、そのフォルダーからパッケージを復元しますローカルの./packagesフォルダーにある別のX.nupkg。dotnet nuget locals all --clear
コマンドは、奇妙な動作が発生して、任意のキャッシュバージョンではなく、希望するnupkgの正確なバージョンを取得している場合に便利です。
新しいASP.NET Core 2.0プロジェクトで参照するDLLが比較的新しいことを考えると、この元のDLL ASP.Netプロジェクトを開発するとき。
この状況では、ASP.Netソリューションの一部として元のDLLプロジェクトを追加するので、同じソリューションワークスペース内のブレークポイントの設定を含む両方のソースコードセットで作業できます。
元のDLLプロジェクトのNUGETパッケージ化は、統合ソリューション全体の最初のリリースが安定するまで遅らせることができ、それをより大規模に利用できるようにしたい場合DLL ASP.NETアプリケーションの範囲を超えた開発者。
.csprojファイルでローカルパッケージを参照する別の方法:
<ItemGroup>
<Reference Include="MyAssembly">
<HintPath>path\to\MyAssembly.dll</HintPath>
</Reference>
</ItemGroup>
問題を解決するには、使用するライブラリ(.dllファイル)を、ライブラリを使用するプロジェクトのプロジェクトの参照に追加します。
プロジェクトを右クリック->追加->参照->プロジェクト->参照-> Path_to_your_generated_library(.dll)
これにより、.csprojファイルに次のノードが自動的に生成されます。
<ItemGroup>
<Reference Include="DotNetCoreClassLibraryCodeParser">
<HintPath>..\..\DotNetCoreClassLibrary\DotNetCoreClassLibrary\bin\Debug\netcoreapp2.1\DotNetCoreClassLibrary.dll</HintPath>
</Reference>
</ItemGroup>
それが役に立てば幸い。