C#でOpenCVを使用してプロジェクトを構築しています。 cvextern.dll
というdllファイルが必要です。ただし、このファイルを参照として追加すると、次のメッセージが表示されます。
参照「cvextern.dll」は追加できません。ファイルがアクセス可能であり、有効なアセンブリまたはCOMコンポーネントであることを確認してください。
検索に疲れた
ファイルはネイティブDLLです。つまり、[参照の追加]で.NETプロジェクトに追加することはできません... DllImportで使用できます( http:// msdn.Microsoft.com/en-us/library/system.runtime.interopservices.dllimportattribute.aspx )
私の場合、.dllを登録する必要がありました。
これを行うには、cmd.exe
(コンソール)を管理者権限で開き、次を入力します。
regsvr32 "foo.dll"
アプリケーションをビルドするときに、必要なdllがbinフォルダーにエクスポート(または手動でコピー)されていることを確認してください。
私は同じプログラムを持っていた、これが役立つことを願っています。
Windows 7を使用している場合は、コマンドプロンプトを開き、管理者として実行します。 <...>。dllを登録します。
管理者として実行する理由は、Windowsスタートでの実行を使用して<...>。dllを登録できますが、アカウントが管理者であっても、dllはユーザーとしてのみ実行されます。
これで、プロジェクト->参照の追加->参照で<...>。dllを追加できます。
ありがとう
「それ」にはcvextern.dllというdllファイルが必要です。 「それ」は、プロジェクトで使用している独自のcsファイルまたは他のサードパーティDLLのいずれかです。
ネイティブdllを独自のcsファイルに呼び出すには、dllをプロジェクトのroot\libディレクトリにコピーし、既存のアイテムとして追加します。 (既存のアイテムを追加)、正しい場所でDllimportを使用します。
サードパーティの場合、ネイティブライブラリをサードパーティライブラリが存在するフォルダにコピーし、既存のアイテムとして追加します。
ビルド後、必要なdllがBuildフォルダーに表示されていることを確認してください。場合によっては、Buildフォルダーに表示されないか、置き換えられます。 Buildフォルダーを手動で削除して、再度ビルドします。
here でTheMattsterで答えを探してください。私はそれを実装し、それは魅力のように働きました。一言で言えば、彼のソリューションは、プロジェクトにリソースとしてCOM dllを追加することを提案し(したがって、プロジェクトのdllにコンパイルされます)、最初の実行時にファイルに書き込みます(つまり、最初にそこに必要なdllファイル)場所)。
以下は彼の答えから取ったものです。
ステップ1)DLLをリソースとして追加します(「Resources.DllFile」以下)。プロジェクトを開くには、[リソース]タブを選択し、[既存のファイルを追加]を選択して= DLLリソースとして。
ステップ2)DLLの名前を文字列リソースとして追加します( "Resources.DllName"として)。
ステップ3)このコードをメインフォームロードに追加します。
if (!File.Exists(Properties.Resources.DllName))
{
var outStream = new StreamWriter(Properties.Resources.DllName, false);
var binStream = new BinaryWriter(outStream.BaseStream);
binStream.Write(Properties.Resources.DllFile);
binStream.Close();
}
私の問題は、プロジェクトでCOM dllを使用する必要があるだけでなく、ClickOnceを使用してアプリでデプロイする必要があり、プロジェクトに参照を追加することなく、上記のソリューションが実際に唯一のものであるということでした働いた。
私の場合、ワークスペースにアンマネージdll(C++)があり、指定する場合:
<files>
<file src="bin\*.dll" target="lib" />
</files>
nugetは、すべてのdllをアセンブリとして(C++ライブラリも)ロードしようとします!この動作を回避するには、C#アセンブリをreferences
タグで明示的に定義します。
<references>
<reference file="Managed1.dll" />
<reference file="Managed2.dll" />
</<references>
備考:参照の親はメタデータです->ドキュメントによると https://docs.Microsoft.com/en-us/nuget/ reference/nuspec#general-form-and-schema
ドキュメント: https://docs.Microsoft.com/en-us/nuget/reference/nuspec