54

ローカル マシンで正常にビルドできるプロジェクトがありますが、TFS でビルドすると、次のエラーが表示されます -

SGEN: 不適切な形式のアセンブリを読み込もうとしました:

このトピックに関する他の多くの投稿を読んだ後、ほとんどの人はビルド タイプを x64 ではなく x86 または任意の CPU に変更する必要があると言っていますが、数え切れないほどの組み合わせを試した後、これは解決策ではありませんでした。私のプログラムもWindowsサービスであるため、32ビットアプリケーションを許可するようにApp Poolを設定することも解決策ではありません.

4

14 に答える 14

38

今日、この同じ問題が発生しました。プロジェクトが自分の PC ではビルドされませんが、他の PC では問題なくビルドされます

最終的には次のようにして修正しました。

エラーのあるプロジェクトを右クリックし、プロパティに移動しました

[ビルド] タブを選択し、最後のオプションである [シリアライゼーション アセンブリの生成] に移動しました。これを [オフ] に設定すると、プロジェクトが正常にビルドされるようになりました。

于 2019-03-25T11:21:47.707 に答える
18

私の問題は最終的にこのページで解決されました - http://aplocher.wordpress.com/2012/10/12/sgen-an-attempt-was-made-to-load-an-assembly-with-an-incorrect-format -tfs-2010/

そのページが将来消えてしまう場合に備えて、関連する手順は次のとおりです-

  1. チーム エクスプローラーで、ビルド定義を右クリックし、[プロセス ファイルの場所を開く] を選択します。
  2. 選択した XAML ファイルをダブルクリックします
  3. デザイナーで、Sequence という名前のコンテナーを選択します (これは、他のすべてを処理する最上位のコンテナーです)。
  4. [引数] リスト (通常は下部) で、MSBuildPlatform を Microsoft.TeamFoundation.Build.Workflow.Activities.ToolPlatform.Auto から Microsoft.TeamFoundation.Build.Workflow.Activities.ToolPlatform.X86 に変更します。
  5. ファイルを保存して閉じます。
  6. ファイルを TFS にチェックインして、ビルドを再試行してください。
于 2012-11-14T04:59:55.703 に答える
4

私の場合、このエラーは x86 / x64 設定の無効な組み合わせによるものではなく、参照アセンブリがビルド サーバーにインストールされていない特定の .NET Framework バージョン (v4.5.1) を対象とするプロジェクトをビルドしようとしたことが原因でした。 .

次の 2 つの条件の組み合わせがエラーの原因でした。

  1. Visual Studio の [プロジェクト プロパティ] ページの [アプリケーション] タブで、[ターゲット フレームワーク] が [.NET Framework 4.5.1] に設定されていました。
  2. ビルド サーバーのフォルダーC:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFrameworkに、v4.5.1 という名前のフォルダーがありませんでした。(v3.5、v4.0、v4.5 など、バージョン番号の付いた他のフォルダー存在していました。)

修正は、Windows 8.1 用の Windows ソフトウェア開発キット (SDK) をビルド サーバーにインストールすることでした。インストール ウィザードの [インストールする機能の選択] ステップで、[.NET Framework 4.5.1 ソフトウェア開発キット] 以外のすべてのボックスのチェックを外しました。

そのインストールを実行すると、Reference Assemblies\Microsoft\Framework.NETFramework フォルダーに存在しない v4.5.1 フォルダーが作成され、ビルドが正常に実行されました。

于 2015-07-29T16:02:06.073 に答える
3

私の答えはola-eldøyの拡張です。私の場合、それぞれのアセンブリで同じ恐ろしいエラーが発生したため、さらに多くのアセンブリを除外する必要がありました。

Could not load file or assembly bla-bla-bla or one of its dependencies. Reference assemblies should not be loaded for execution.  They can only be loaded in the Reflection-only loader context. (Exception from HRESULT: 0x80131058)

したがって、私の解決策はola-eldøyのコードを拡張してDirectory.Build.targetsに保存することでした:

<Project>
  <ItemGroup>
    <ReflectionOnlyAssemblyNames Include="Microsoft.Bcl.AsyncInterfaces"/>
    <ReflectionOnlyAssemblyNames Include="System.Buffers"/>
    <ReflectionOnlyAssemblyNames Include="System.Numerics.Vectors"/>
    <ReflectionOnlyAssemblyNames Include="System.Runtime.CompilerServices.Unsafe"/>
  </ItemGroup>
  <Target Name="RemoveDesignTimeFacadesBeforeSGen" BeforeTargets="GenerateSerializationAssemblies">
    <ItemGroup>
      <_ReflectionOnlyAssembly_Names Include="@(_ReferencePath_Names)"
                                     Condition="'@(ReflectionOnlyAssemblyNames)' == '@(_ReferencePath_Names)' And '%(Identity)' != ''"/>
    </ItemGroup>
    <ItemGroup>
      <ReferencePath Remove="@(_DesignTimeFacadeAssemblies_Names->'%(OriginalIdentity)')" />
      <ReferencePath Remove="@(_ReflectionOnlyAssembly_Names->'%(OriginalIdentity)')" />
    </ItemGroup>
    <Message Importance="normal" Text="Removing DesignTimeFacades from ReferencePath before running SGen." />
  </Target>
  <Target Name="ReAddDesignTimeFacadesBeforeSGen" AfterTargets="GenerateSerializationAssemblies">
    <ItemGroup>
      <ReferencePath Include="@(_DesignTimeFacadeAssemblies_Names->'%(OriginalIdentity)')" />
      <ReferencePath Include="@(_ReflectionOnlyAssembly_Names->'%(OriginalIdentity)')" />
    </ItemGroup>
    <Message Importance="normal" Text="Adding back DesignTimeFacades from ReferencePath now that SGen has run." />
  </Target>
</Project>
于 2020-10-22T03:04:24.207 に答える
0

これと同じ問題があり、出力画面を表示すると詳細がわかりました。そこから、ターゲット フレームワークがこのタイプのプロジェクトで許可されているよりも高いことがわかりました (私は SQL Server CLR プロジェクトを構築していました)。プロジェクトのターゲット フレームワークは 4.0 に設定されました。これを 3.5 に戻すと、問題が解決しました。

デイブ

于 2015-02-11T17:21:37.033 に答える
0

プロジェクトを 4.0 から 4.5.2 にアップグレードし、ビルド サーバーに Microsoft .NET Framework 4.5.2 Developer Pack をインストールしました。その後、うまくいきました。他のすべての .net バージョンの開発者パックがあります。

https://support.microsoft.com/en-us/help/2901951/the-microsoft--net-framework-4-5-2-developer-pack-for-windows-server-2

于 2018-01-22T14:28:58.167 に答える
-1

これはVisual Studio 2017でうまくいきました:

プロジェクトのプラットフォームの 1 つを x64 に変更したところ、PUBLISH (Not Run) 中にこのエラーが発生しました。

これがあなたの場合:

パブリッシュ設定に移動します構成を任意のCPUからリリースx64(またはその他)に厳密に変更します

その後、公開中のエラーが消えます。

于 2020-06-23T20:52:56.570 に答える