2

C# XNA ホスト プロジェクトと、すべての機能を含む F# クライアント プロジェクトがあります。F# プロジェクトには、XNA プロジェクトが同意しない mscorlib.dll および System.dll への参照があるため、ビルドされません (実際のエラー -- まあ、私の意見ではエラーであるべきという警告です--投稿の一番下にあります)。実際の XNA プラットフォーム (特に Xbox 360 用) を対象とするように F# プロジェクトに指示するにはどうすればよいですか?

C:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets(1578,5): warning MSB3268: The primary reference "\\vmware-host\Shared Folders\Projects\FSharp\Whirlygigs\Whirlygigs.Lib\bin\Debug\Whirlygigs.Lib.dll" could not be resolved because it has an indirect dependency on the framework assembly "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" which could not be resolved in the currently targeted framework. ".NETFramework,Version=v4.0,Profile=Client". To resolve this problem, either remove the reference "\\vmware-host\Shared Folders\Projects\FSharp\Whirlygigs\Whirlygigs.Lib\bin\Debug\Whirlygigs.Lib.dll" or retarget your application to a framework version which contains "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=***".
C:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets(1578,5): warning MSB3268: The primary reference "\\vmware-host\Shared Folders\Projects\FSharp\Whirlygigs\Whirlygigs.Lib\bin\Debug\Whirlygigs.Lib.dll" could not be resolved because it has an indirect dependency on the framework assembly "System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" which could not be resolved in the currently targeted framework. ".NETFramework,Version=v4.0,Profile=Client". To resolve this problem, either remove the reference "\\vmware-host\Shared Folders\Projects\FSharp\Whirlygigs\Whirlygigs.Lib\bin\Debug\Whirlygigs.Lib.dll" or retarget your application to a framework version which contains "System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=***".
4

1 に答える 1

4

あなたが抱えている問題は、プロジェクトの 1 つが Windows バージョンの .NET Framework ( mscorlibSystem) をターゲットにしており、プロジェクトの 1 つがフレームワークの Xbox 360 バージョンをターゲットにしていることです。また、基本的に、異なるコア フレームワークをターゲットとするアセンブリをリンクすることはできません。

あなたの F# プロジェクトは Windows バージョンのアセンブリをターゲットにしていると思います。F# プロジェクトで Xbox 360 参照アセンブリをターゲットにする必要があります。

(私はこれを自分でやったことがないことに注意してください。したがって、私の答えは、あなたが試すことができるもののリストにすぎません。)

参考までに、これらの参照アセンブリはデフォルトでC:\Program Files (x86)\Microsoft XNA\XNA Game Studio\v4.0\References\Xbox360\

まず、Portable Class Library を使用してみてください。これについてはさまざまな報告を聞いたことがあります。

おそらくこれを行う方法は、手動の MSBuild トリックを使用することです。Visual Studio プロジェクト ファイル、MSBuild ファイル (XML) です。テキストエディタで開いて、それで遊ぶことができます。XNA プロジェクトが次のファイルをインポートしていることがわかります。

<Import Project="$(MSBuildExtensionsPath)\Microsoft\XNA Game Studio\Microsoft.Xna.GameStudio.targets" />

そのため、そのインポートをプロジェクト ファイル (および<XnaPlatform>適切な場所にある などの他の XNA 構成の一部) に追加するだけです。それはうまくいくかもしれません。

そうでない場合は、実際にこれらのファイル ( にC:\Program Files (x86)\MSBuild\Microsoft\XNA Game Studio\v4.0あります) を見て、フレームワーク アセンブリのパスを設定するために何を使用しているかを調べてみてください。確かに言うには、MSBuild について十分な知識がありません。

それ以外の場合は、総当たり攻撃を行うことができます。これを に追加することで、コア フレームワークの組み込み参照を無効にすることができます<PropertyGroup>

<NoStdLib>true</NoStdLib>

次に、各参照のパスを手動で設定します。したがって、これを次のように変更します。

<Reference Include="mscorlib" />

これに:

<Reference Include="mscorlib">
  <HintPath>C:\Program Files (x86)\Microsoft XNA\XNA Game Studio\v4.0\References\Xbox360\mscorlib.dll</HintPath>
</Reference>

他のすべての参照についても同様です。私は以前、この最後の方法で、似たようなことをする(ターゲットフレームワークを手動で変更する)ことに成功しました。

于 2012-10-21T05:17:04.307 に答える