C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: 異なるプロジェクト間での値の受け渡し


(過去ログ 179 を表示中)

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■102402 / inTopicNo.1)  異なるプロジェクト間での値の受け渡し
  
□投稿者/ ちよぴっぴ (1回)-(2023/09/21(Thu) 14:52:21)

分類:[.NET 全般] 

はじめまして、お世話になります。

・使用環境
Windows10
Visual Studio Community 2022
VB.NET

異なるプロジェクト間での値がうまく渡せなくて困っております。
プロジェクトの構成は同じソリューションの中にプロジェクトA(フォームやExcel操作関連)とプロジェクトB(Dllファイル)です。

プロジェクトAで作成したExcelの値をプロジェクトBに渡すため、プロジェクトBにプロジェクトAを参照設定した所、「プロジェクト '..\FormCreate\FormCreate.vbproj' は 'net6.0-windows' を対象にしています。'.NETFramework,Version=v4.7.2' を対象とするプロジェクトからは参照できません。」とエラーが出てしまいます。

色々調べてみた所「参照される側のプロジェクトは、クラスライブラリ以外にしていると参照設定時にエラーが発生してしまう。」とこれに引っ掛かったようです。

このプログラムの目標はExcelの値を読み込んでCADに線を引くということを目指しています。(値を受け取らず線を引くだけならうまくいきました。)
プロジェクトA(フォームを使いExcelのパス及び値の入出力)→プロジェクトB(Excelの値を受け取り、線を引くコマンド作成)→プロジェクトA(プロジェクトBのコマンド呼び出し)という流れを想定していました。


勉強始めたばかりで行き当たりばったりで作成したため、構成がおかしいのかなと考えてみましたが、なかなか解決策が見つからず…。
こういう場合はどうするのがよいでしょうか。
引用返信 編集キー/
■102403 / inTopicNo.2)  Re[1]: 異なるプロジェクト間での値の受け渡し
□投稿者/ WebSurfer (2788回)-(2023/09/21(Thu) 15:29:31)
No102402 (ちよぴっぴ さん) に返信

読みにくいので

> プロジェクトAで作成したExcelの値をプロジェクトBに渡すため、プロジェクトBにプロジェクトAを参照設定した所、
> 「プロジェクト '..\FormCreate\FormCreate.vbproj' は 'net6.0-windows' を対象にしています。
> '.NETFramework,Version=v4.7.2' を対象とするプロジェクトからは参照できません。」とエラーが出てしまいます。

ターゲットフレームワークが、プロジェクト A は .NET 6.0 で、プロジェクト B は .NET Framework 4.7.2 と違う
のがそのエラーの原因のようですが、同じにすることはできないのですか?
引用返信 編集キー/
■102404 / inTopicNo.3)  Re[1]: 異なるプロジェクト間での値の受け渡し
□投稿者/ 魔界の仮面弁士 (3693回)-(2023/09/21(Thu) 15:37:52)
No102402 (ちよぴっぴ さん) に返信
>「プロジェクト '..\FormCreate\FormCreate.vbproj' は 'net6.0-windows' を対象にしています。
> '.NETFramework,Version=v4.7.2' を対象とするプロジェクトからは参照できません。」とエラーが出てしまいます。

ターゲットフレームワークに互換性が無いためです。
.NET Framework と .NET は別のフレームワークですが、
 FormCreate は .NET 6.0 (Windows)向け
 他方は .NET Framework 4.7.2 向けになっています。


呼び出す側と呼び出される側で、ターゲット フレームワークを揃えましょう。
新規プロジェクト作成時のテンプレートでいうと、
「クラス ライブラリ」が .NET または .NET Standard 向けで、
「クラス ライブラリ (.NET Framework)」は .NET Framework 向けです。

それぞれのターゲットフレームワークを揃えることができない事情がある場合、
クラスライブラリ側のターゲット フレームワークを「.NET Standard 2.0」にするという選択肢もあります。
そうすると、呼び出す側が .NET/.NET Core と .NET Framework のいずれでも利用可能となりますが…
あえて両対応の設計にしようとするとなると、それぞれの機能差を把握しておくべきすので、初学者向けでは無いです。


> プロジェクトA(フォームを使いExcelのパス及び値の入出力)→プロジェクトB(Excelの値を受け取り、線を引くコマンド作成)→プロジェクトA(プロジェクトBのコマンド呼び出し)という流れを想定していました。
「Excel の値を受け取る」部分がどうなっているのかにもよりますね。

A が Excel ファイルの内容を読み取って、その値を B.DLL に渡す動作なのか。

それとも A は Excel のファイル名を渡すだけで、
Excel ファイルの中身の読み取りも B.DLL に任せるのか。

そして Excel の値をどうやって読み取っているのか。
VB でエクセルの読み込みを行う場合、使用できるライブラリが幾つかありますね。
(たとえば NetOffice などは .NET Framework 専用)
引用返信 編集キー/
■102405 / inTopicNo.4)  Re[2]: 異なるプロジェクト間での値の受け渡し
□投稿者/ ちよぴっぴ (2回)-(2023/09/21(Thu) 19:20:57)
No102403 (WebSurfer さん) に返信 ■102404 (魔界の仮面弁士 さん) に返信

WebSurfer様、魔界の仮面弁士様、迅速なご回答を頂き、ありがとうございます。

> 呼び出す側と呼び出される側で、ターゲット フレームワークを揃えましょう。

ご指摘頂いた通りにフレームワークをライブラリに合わせた所、エラーなく参照できました!
「Windowsフォームアプリ(.net windows)」と「windowsフォームアプリケーション(.net Framework)」、クラスライブラリにも違いがあるんですね。
フォームを選ぶ際、違いが気になったので調べはしたのですが、Windowsフォームアプリのが新しい規格だからという浅い理由で選んでしましました。

CADにクラスライブラリを読み込んで線を描画するという形なのですが、クラスライブラリ(.NET または .NET Standard 向け)は読み込めないようなので、
フォーム側をクラスライブラリに合わせて作り直そうと思います。(.net framework 4.8)

>A が Excel ファイルの内容を読み取って、その値を B.DLL に渡す動作なのか。
その動作を想定しています。

>VB でエクセルの読み込みを行う場合、使用できるライブラリが幾つかありますね。
「ClosedXML」を使用しています。Excelは読み書き保存まで今の所問題なく動作しています。

フレームワーク、クラスライブラリの規格の違い、大変勉強になりました…。
またわからない所が出てくると思うので、その時もよろしくお願いしますm(_ _)m
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -