2017-12-03 23 views
1

さて、解決策を見つけるのが難しい問題に遭遇しました。ビジュアルスタジオのプロパティを使用するソリューションはたくさんあります。問題は私がビジュアルスタジオを使用していないことです。私はcsc.exeを使用して自分のコードをコンパイルしています。ビジュアルスタジオのない外部DLLに埋め込まれたリソースを使って作業する

これまで私がこれまで持っていたことは次のとおりです。


がResource.dll

Main.csx

Rsc.csx

a.png


をdll.cmd exe.cmd

これは.cmdのファイルと.csxファイルのコードのすべての

@echo off 
csc.exe /target:winexe /reference:Resource.dll /out:Main.exe Main.csx 
pause 

がRsc.csx

using System; 
using System.IO; 
using System.Drawing; 
using System.Reflection; 
using System.Windows.Forms; 

namespace EmIm 
{ 
    public static class Bck 
    { 
     public static Image GetBck() 
     { 
      Bitmap bmp = new Bitmap(Assembly.GetExecutingAssembly().GetManifestResourceStream("a.png")); 
      Image rtn = bmp; 
      return rtn; 
     } 
    } 
} 

@echo off 
csc.exe /target:library /resource:a.png /out:Resource.dll Rsc.csx 
pause 

をdll.cmd exe.cmdです

メイン.csx

using System; 
using System.IO; 
using System.Drawing; 
using System.Reflection; 
using System.Windows.Forms; 

using EmIm; 

namespace prg 
{ 
    class class_m 
    { 
     public static void Main() 
     { 
      Form f1 = new Form(); 
      try 
      { 
       f1.BackgroundImage = Bck.GetBck(); 
      } 
      catch(Exception e) 
      { 
       MessageBox.Show(e.Message); 
      } 
      f1.ShowDialog(); 
     } 
    } 
} 

私はこれを実行すると、私は「NULL」の値を表示するメッセージボックスを取得するには、私はa.pngにアクセスできるようにするために必要なんどのような手順「ストリーム」

のために有効ではありません反射で、私はa.pngがアセンブリ内の正しい名前であることを確認しました。どんな助けでも大歓迎です。ありがとう:)

+0

バッチファイルのタグが少し伸びていると思います! – Compo

+0

Tsk、tsk。 GetBck()メソッドは、Assembly.GetExecutingAssembly()が正常に動作するように[MethodImpl(MethodImplOptions.NoInlining)]属性を必要とします。なぜ誰かが意図的にこのような自分の脚を刺すだろうと推測するのは難しいです。 –

答えて

0

この問題の簡単な解決策を提供してくれたHans Passantに感謝します。私はこの問題にどのように答えるかを調べる場所はどこにもわからなかったが、彼はそれをひとつのコメントでまとめた。

一つだけのファイルは、プログラムがうまくいけば任意の、私の問題への迅速な修正のために、もう一度感謝ハンスアンパッサンを

using System; 
using System.IO; 
using System.Drawing; 
using System.Reflection; 
using System.Windows.Forms; 
using System.Runtime.CompilerServices; 

namespace EmIm 
{ 
    public static class Bck 
    { 
     [MethodImpl(MethodImplOptions.NoInlining)] 
     public static Image GetBck() 
     { 
      Bitmap bmp = new Bitmap(Assembly.GetExecutingAssembly().GetManifestResourceStream("a.png")); 
      Image rtn = bmp; 
      return rtn; 
     } 
    } 
} 

ファイル

新しいRsc.csxを動作させるために変更する必要がありましたVisual Studioを避けるために十分に頑強な他のプログラマーは、これを使わずに動作するソリューションを見つけるためにこれを探すことができます。楽しいプログラミングをしてください:)

関連する問題