2017-12-03 8 views
1

그래, 솔루션을 찾는 데 문제가 있음을 알게되었습니다. 시각적 인 스튜디오 속성을 사용하는 솔루션이 많이 있습니다. 문제는 비주얼 스튜디오를 사용하지 않고 csc.exe를 사용하여 코드를 컴파일하는 것입니다.Visual Studio가없는 외부 DLL에 내장 된 리소스로 작업하기

여기까지 제가 지금까지 가지고 있습니다.


가 Resource.dll

Main.csx

Rsc.csx

a.png


을 dll.cmd exe.cmd

이것은

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

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; 
     } 
    } 
} 
Rsc.csx

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

을 dll.cmd

을 exe.cmd하여 .CMD 파일에 대한 코드와 .csx 모든 파일

Main.csx

내가 이것을 실행하면3210
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)에게 큰 감사를드립니다. 이 문제에 대한 답변을 찾는 방법을 어디에서 찾아야할지 모릅니다. 그러나 한 가지 의견으로 요약했습니다.

하나의 파일 만 잘하면 어떤,

새로운 Rsc.csx 내 문제에 그 빠른 수정을 위해, 다시 한번 감사 한스 옆모습을

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; 
     } 
    } 
} 

파일 작업 프로그램의 순서를 변경해야했다 비주얼 스튜디오를 피하기에 충분히 고집이면서 다른 프로그래머들은 아마도 이것을 사용하지 않고도 작동하는 솔루션을 찾기 위해 이것을 바라 볼 수 있습니다. 프로그래밍 재미있게 보내주세요 :)

관련 문제