質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.31%

Q&A

解決済

1回答

1181閲覧

VS2020 C# アセンブリ参照の仕方で困っています。CS0234 :

guijiu

総合スコア36

0グッド

0クリップ

投稿2024/06/23 07:13

編集2024/06/23 07:20

実現したいこと

NAudioライブラリーを使ってアプリ SentenceTimeStamper、以下STSを作っています。
(正確にはNAudioがver1.9から2.2にバージョンアップし、また.Netframewark4がサポート外になり、win11で開発を継続したいためバージョンアップしています。3年ぶりのC#開発のため、色々忘れています。)
STSは、NAudioライブラリのほか、NAudio.WaveFormRendererを使っていますが、WaveFormRenderer機能を追加したくクラスを追加したり、コードを書き換えたりしています。
現在、バージョンアップの作業をしていますが、以下のような問題に悩まされています。

発生している問題・分からないこと

エラー
CS0246 型または名前空間の名前 'PictureBox' が見つかりませんでした (using ディレクティブまたはアセンブリ参照が指定されていることを確認してください) WaveFormRendererLib
が発生しています。

STS ver.2(以下STS2)はVisualStudio2022を使って開発をしています。ver.2にするためにSTS ver.1(以下STS1)のソリューションからWaveFormRendererのプロジェクトを削除し、GitHubのNAudio.WaveFormRendererからZIPファイルをダウンロードし、またその中からWaveFormRendererLibフォルダーをコピーし、STS2の開発用フォルダに貼り付け、VS2022のソリューションに既存のプロジェクトとして追加しました。

STS2のソリューションエクスプローラ

そのあと、WaveFormRendererを改造するために、クラスSentenceInfo(.cs)を追加しました。このクラスはSystem.Windows.FormsのPictureクラスを継承しています。

<STS1での状況>
以前開発が完了したSTS1のソリューションエクスプローラを示します。
STS1のソリューションエクスプローラ
STS1の時は、エラー(CS0246)は発生しませんでした。

<STS1とSTS2のソリューションエクスプローラ上の違い>
上の2つの図のソリューションエクスプローラを比べるとSTS2のWaveFormRendererLibには「参照」の項目がありません。このためアセンブリ参照ができないのだと考えます。
アセンブリを参照することができれば問題につながるのではないでしょうか。

なお、STS1STS2はGitHubからダウンロードできます。

エラーメッセージ

error

1重大度レベル コード 説明 プロジェクト ファイル 行 抑制状態 2エラー (アクティブ) CS0246 型または名前空間の名前 'PictureBox' が見つかりませんでした (using ディレクティブまたはアセンブリ参照が指定されていることを確認してください) WaveFormRendererLib D:\XXXXX\source_C#\TestSTS\SentenceTimeStamper-master (1)\SentenceTimeStamper2\WaveFormRendererLib\SentenceInfo.cs 7 3

該当のソースコード

C#

1using System; 2using System.Windows.Forms; 3 4 5namespace NAudio.WaveFormRenderer 6{ 7 public class SentenceInfo:PictureBox 8 { 9 private long samplingPosition; 10 private bool onstart; 11 private bool onmanual; 12 private const int ArrowWidth = 44; 13 private const int ArrowHeight = 21; 14 private string sentenceText; 15 16 17 public SentenceInfo() 18 { 19 Width = ArrowWidth; 20 Height = ArrowHeight; 21 22 } 23 24 public SentenceInfo(long Position, bool onStart, bool onManual) 25 { 26 Width = ArrowWidth; 27 Height = ArrowHeight; 28 //Console.WriteLine("ArrowWidth1={0}", Width); 29 30 this.samplingPosition = Position; 31 this.onstart = onStart; 32 this.onmanual = onManual; 33 34 changImage(); 35 } 36 37 private void changImage() 38 { 39 if (this.onstart) 40 { 41 this.Image = WaveFormRendererLib.Properties.Resources.StartTag; 42 } 43 else 44 { 45 this.Image = WaveFormRendererLib.Properties.Resources.PauseTag; 46 } 47 48 } 49 public long SamplingPosition { get { return samplingPosition; } set { samplingPosition = value; } } 50 public bool OnStart 51 { 52 get 53 { 54 return onstart; 55 } 56 set 57 { 58 onstart = value; 59 changImage(); 60 } 61 } 62 63 64 public bool OnManual { get { return onmanual; } set { onmanual = value; } } 65 66 public string SentenceText { get { return sentenceText; } set { sentenceText = value; } } 67 68 } 69} 70

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

SentenceTimeSamperプロジェクトとWaveFormRendererLibプロジェクトのターゲットフレームワークを調べました。
以下の図のとおり、
SentenceTimeSamperプロジェクト:.NET Framework4.7.2
WaveFormRendererLibプロジェクト:.NET Standard2.0
でした。
WaveFormRendererLibプロジェクトのフレームワークが.NET Framework4.7.2ではなく、.NET Standard2.0のため、System.Windows.Formsを参照できないのでしょうか??

イメージ説明

イメージ説明

補足

以上、現状わかる範囲で調べてみました。不足についてはご質問ください。
ご教示の程、よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

.NET Standard から Windows Forms は参照できません。
SentenceInfo クラスは SentenceTimeSamperプロジェクトに組み込むか、.NET Framework 4.7.2 のクラスライブラリを作成してください。

投稿2024/06/23 07:58

KOZ6.0

総合スコア2730

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guijiu

2024/06/24 05:24 編集

回答ありがとうございます。 非常に参考になりました。 幾つか理解に至っていないことがありますが、方向性はわかりました。ゴチョゴチョしながら解決したいと思います。 ・SentenceTimeSamperプロジェクトに組み込むのはSentenceInfo クラスだけでいいのか、それとも名前空間NAudio.WaveFormRendererのクラスすべてを組み込むのか。 ・「.NET Framework 4.7.2 のクラスライブラリを作成」とは具体的にどこようなことをするのか。 等不勉強な点はありますが、.Net Standard、.NetFramework、.NetCoreなどの関係を勉強しながら、解決したいと思います。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.31%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問