私がクラスライブラリを作る任意の時間は、その依存関係のすべてはそれに付属しているべきであると私には思えます。言い換えれば、私は単に.dllを参照して行くことを期待します。結局のところ、私が参照している.dllはそれ自身でうまく構築されます。
これは当てはまりませんか?私はそれを使用するために、依存関係のすべての依存関係を参照していますか?
これについて啓発されることを楽しみにしています。
を説明するために
問題は、ここでは一例です。 Class1
:
は1つのpublicクラスで、クラスライブラリプロジェクトです。ClassLibrary1
ClassLibrary2
は、別のクラスライブラリであり、同じ解決法で の公的クラス:Class1
です。これらの2つのクラスは、それぞれ独自の名前空間に存在します。
ただし、
ClassLibrary2
の参照ClassLibrary1
およびClassLibrary2.Class1
は、ClassLibrary1.Class1
を継承しています。ConsoleApplication1
のみClassLibrary2
を参照する同じ溶液中で、コンソールアプリケーションです。
これまではすべてがビルドされています。すべてが同じフレームワークです。私はClassLibrary2.Class1
を開始しようとすると
はしかし、私は、ビルドエラーを取得:
Error 1 The type 'ClassLibrary1.Class1' is defined in an assembly that is not referenced. You must add a reference to assembly 'ClassLibrary1, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'. ...\ConsoleApplication1\Program.cs 12 4 ConsoleApplication1
コードスニペット
namespace ClassLibrary1
{
public class Class1
{
public Class1() { }
}
}
...
namespace ClassLibrary2
{
public class Class1 : ClassLibrary1.Class1
{
public Class1() : base() { }
}
}
...
namespace ConsoleApplication1
{
using ClassLibrary2;
class Program
{
static void Main(string[] args)
{
// error mentioned previously in post is on following line
var a = new Class1();
}
}
}
、しかししたClassLibrary1.dllはアクセス可能でなければなりません。 – McNets
私はそれがC#と.NETがどのように機能するかと思います。 'ClassLibrary1'は' ClassLibrary2'の直接の依存関係であり、 'ClassLibrary2'は' ConsoleApplication1'の直接の依存関係であるため、 'ClassLibrary1'は' ConsoleApplication1'の間接依存です。コンパイラは、そのプロジェクトが構築される前に特定のプロジェクトに対してすべての依存関係が利用可能であることを知る必要があります。 –
正確には、すべての(直接的または間接的)使用済みライブラリをアプリケーションに追加する必要があります。 Btw。他のクラスから派生したクラスに同じ名前を使用することはお勧めできません。 –