none
公開するファイル RRS feed

  • 質問

  • アプリケーションを開発し公開したいと思うのですが、以前は(2、3年前)exeファイルだけを配布してうまくいったのですが

    今回、配布しサーバにアップしたexeファイルを開発したのとは違うパソコンでexe単体で起動すると下記のようなエラーがでてしまいました。

    混合モード アセンブリはバージョン ‘v1.1.4322′ のランタイムに対して作成されており、追加の構成情報がないと 4.0 ランタイムでは読み込めません。

    http://nky-tech-sdt.blogspot.com/2010/02/net-framework-40.html

    これは2,3年前にも開発の時発生したエラーで上記を参照して下記のようにapp.configを書き換えるとうまくいきました。

    ただ、app.configファイルは配布はしなくても正常に起動していました。

    -------------------------------------------------------------------------------------------------------------------

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
        <configSections>
            <sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=****************" >
                <section name="pairpair.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=****************" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
            </sectionGroup>
        </configSections>
        <userSettings>
            <pairpair.Properties.Settings>
                <setting name="a" serializeAs="String">
                    <value>True</value>
                </setting>
            </pairpair.Properties.Settings>
        </userSettings>
        <startup useLegacyV2RuntimeActivationPolicy="true">
            <supportedRuntime version="v4.0"/>
        </startup>
    </configuration>

    -------------------------------------------------------------------------------------------------------------------

    Releaseフォルダにあるファイルの一覧を表示します。

    hoge.exe

    hoge.exe.config

    hoge.pdb

    hoge.vshost.exe

    hoge.vshost.exe.config

    hoge.vshost.exe.manifest

    原因と解決方法をご存知の方ご相談にのっていただけましたら幸いです。

    2011年12月6日 12:02

回答

  • Managed DirectXはすでに終了したプロジェクトです。特殊な条件の場合、質問文に加えるべきです。

    ただし、リンク先Wikipediaの記述によると.NET Framework 2.0に対応しているとのことで、そのバージョンをインストールしたことで以前は正常動作したのかもしれません。

    Managed DirectXが今後.NET 4に対応するとは思えないため、単にコンパイルし直すのではなく、他の方式を採用するべきでしょう。というか、.NET 2.0の時点でそう判断すべきでした。

    2011年12月8日 8:02

すべての返信

  • Visual Studio.NET 2003 で作成した C#/VB.NET アプリケーションが利用する .NET Framework 1.1 は [ここから訂正] 各社が出荷するマシンのプリインストール状態やほかのソフトウェアをインストールする、Windows Update でインストールするといったことをしていれば、入っているかもしれません。[ここまで訂正]
    このため、exe だけで動いたのでしょうけれども、実際には .NET Framework 1.1 に依存するアプリケーションであり、インストーラーを構成するべきアプリケーションだったといえます。

    なお、Windows 7 では搭載されていないどころか、.NET Framework 1.1 はサポート対象外です。
    それを理解した上で、.NET Framework 1.1 を無理矢理入れてもらうか、新しい開発環境に移行、修正、テストをして新しい .NET Framework に対応させるかが必要でしょう。
    app.config の supportedRuntime とか、useLegacyV2RuntimeActivationPolicy で回避できるかもしれませんが、それでうまく動く保障はありませんのでご自身でテストしてください。

    # ところで、userSettings とか必要なんでしょうか?
    質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。
    • 編集済み AzuleanMVP, Moderator 2011年12月7日 13:41 WindowsXPに関する誤った記述を削除。
    2011年12月6日 13:50
    モデレータ
  • 質問文が書かれていないような…「公開するファイル」というタイトルやファイル一覧が何かを語っているようにも見えますが、でも、何を聞きたいのかご自身ではっきりさせてください。

    挙げられているapp.config、この内容を見る限り.NET Framework 4を使用しています。「バージョン ‘v1.1.4322′ のランタイムに対して作成されており」というエラーと関連が見えません。

    Azuleanさん:
    「.NET Framework 1.1 は Windows XP のどこかから標準搭載されていました」は嘘です。Windows XPには搭載されたことはありません。Windows Server 2003(SPやR2)には1.1が搭載されていました。
    # プリインストールパソコンにメーカーが独自判断でインストールすることはありますが。

    2011年12月7日 0:59
  • ご指摘ありがとうございます。
    確かによく思い返してみるとそうすね。嘘を書いてしまい、閲覧された方々にはご迷惑をおかけしました。
    出先のため、先の投稿の修正は夜にやります。
    質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。
    2011年12月7日 3:36
    モデレータ
  • まず、質問自体がおろそかになっててすいません。

    質問は何でこういうエラーがでるのかという原因と

    どうやったら解決できる

    (例えばhoge.exe.configも一緒に配布しなければ行けないとか)

    のかという2点です。

     

    ちなみに2,3年前は.NET Framework 2.0で今回は.NET Framework 4 Client Profileです。

     

    2011年12月7日 15:32
  • 質問は何でこういうエラーがでるのかという原因


    あなたが作ったプログラムが .NET Framework 1.1 の存在を前提としているのに対して、同じバージョンが入っていない。

    どうやったら解決できる

    C# や VB.NET で作る限り、exe 単体での動作は不可能です。

    .NET Framework 1.1 を入れてもらう(Windows 7 ではサポートされていません)、.NET Framework 4 で無理矢理動くように .config ファイルを添付する(ただし、正常に動作する保証はないので、あなたが検証する必要がある)、.NET Framework 2.0 以上(Visual Studio 2005 以上) でビルドしなおす。

    なお、OS との組み合わせ、対象環境次第では たまたま exe だけで動くこともあります。


    質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。
    2011年12月7日 15:42
    モデレータ
  • Azuleanさんご返信ありがとうございます。

     

    >.NET Framework 2.0 以上(Visual Studio 2005 以上) でビルドしなおす。

     

    とのことなのですが、.NET Framework 4 Client Profile(Visual Studio 2010)で作成しています。

    何か間違ってるのかな・・・・

    2011年12月7日 15:57
  • とのことなのですが、.NET Framework 4 Client Profile(Visual Studio 2010)で作成しています。

    何か間違ってるのかな・・・・

    ちょっと状況がきちんと整理できていないのですが、.NET Framework 4 でビルドし直した上で、相手先環境で動かすためにどうすればよいかということですか?
    そうだとすると、.NET Framework 4 を入れてもらってくださいと言うだけですが…。

    「Visual Studio 2010 でビルドし直している」という情報は初出なので、言っていることが求めていることと合っていないのであれば、きちんと状況などを整理していただけますか。


    質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。
    2011年12月7日 21:24
    モデレータ
  • 情報不足でごめんどうおかけします。

    2,3年前

    【Visual Studio】2008

    【.NET Framework】2.0

    【配布】exeファイル単体で問題なし。

    今回

    【Visual Studio】2010

    【.NET Framework】4.0 Client Profile

    【配布】exeファイル単体であのエラーがでる。

    ただし、デバッグする時はどちらの場合もあのエラーがでるのでapp.configを書き換えると問題は解消されました。

    2011年12月8日 2:48
  • 質問文で言及されていませんが、もしかしてEXEファイルは関係なくて、参照しているDLLの一部が.NET 1.1でコンパイルされたものだったりしませんか?
    2011年12月8日 2:52
  • そうです。あります。

     

    自分で説明している内にだんだんと気づき始めてはいたのですが

    佐祐理さんのコメントで確信しました。

     

    よくよく考えたら昔はどのパソコンにも1.1が入っていたような・・・

    だから動いたのか・・・・

     

    となるとframework1.1を使う人に入れてもらえば問題ないということなのでしょうか?

     

     

    2011年12月8日 3:40
  • 「あります。」ではなく具体的にどのようなものかを書いてもらえたら…

    .NET 1.1でコンパイルされたDLLについても.NET 4に統一すれば問題ありません。それができないのであればsupportedRuntimeが記述された.exe.configが必要です。

    .NET 2.0の時にうまくいった理由はわかりません。本来うまくいかないはずであり、異なるファイルを使用していた等、何らかの間違いがあったのかと思われます。

    • 回答の候補に設定 佐祐理 2011年12月9日 0:16
    2011年12月8日 4:02
  • 佐祐理さん、世話焼かせてすいません。

    Microsoft.DirectX

    Microsoft.DirectX.DirectSound

    どちらもランライムバージョンv1.1.4322となっております。

     

    2011年12月8日 4:19
  • Managed DirectXはすでに終了したプロジェクトです。特殊な条件の場合、質問文に加えるべきです。

    ただし、リンク先Wikipediaの記述によると.NET Framework 2.0に対応しているとのことで、そのバージョンをインストールしたことで以前は正常動作したのかもしれません。

    Managed DirectXが今後.NET 4に対応するとは思えないため、単にコンパイルし直すのではなく、他の方式を採用するべきでしょう。というか、.NET 2.0の時点でそう判断すべきでした。

    2011年12月8日 8:02
  • そうですか。ありがとうございます。
    2011年12月8日 23:33