我有一个可以建立我的本地机器上正常,但是,当我得到TFS建立它的一个项目,我收到以下错误 -
SGEN:试图用不正确的格式加载程序集:
通过许多其他职位在这里阅读本主题后,大多数人只是说我需要生成类型更改为x86或任何CPU,而不是64位,但在尝试了无数的组合后,这也不是办法。 我的程序也是一个窗口服务,所以设置的应用程序池,让32个应用程序(由其他人的建议),也解决不了问题。
我有一个可以建立我的本地机器上正常,但是,当我得到TFS建立它的一个项目,我收到以下错误 -
SGEN:试图用不正确的格式加载程序集:
通过许多其他职位在这里阅读本主题后,大多数人只是说我需要生成类型更改为x86或任何CPU,而不是64位,但在尝试了无数的组合后,这也不是办法。 我的程序也是一个窗口服务,所以设置的应用程序池,让32个应用程序(由其他人的建议),也解决不了问题。
-我的问题终于通过此页面解决http://aplocher.wordpress.com/2012/10/12/sgen-an-attempt-was-made-to-load-an-assembly-with-an-incorrect-format -tfs-2010 /
万一那个页面永远消失在未来,这里涉及的步骤 -
安装最新的后问题消失的Windows SDK ,其中包括sgen.exe的64位版本:
http://msdn.microsoft.com/en-us/windows/desktop/bg162891.aspx
有时(如果一个不利于)旧版本的帮助:
http://msdn.microsoft.com/en-us/windows/desktop/hh852363.aspx
出于某种原因,SGEN的64位版本不包含在微软构建工具
我遇到了同样的错误,当我试图编译我的项目(平台目标设置为86)的发行。 它在调试编译罚款。 我才来的,在发行,生成序列化组件运行; 因此,在调用SGEN效用。 问题是,所谓的MSBuild的SGEN x64版本对我的x86 EXE,其产生的误差。 我只好让MSBuild的使用SGEN的正确版本通过这个参数的MSBuild:
/p:SGenToolPath="C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\NETFX 4.0 Tools"
我发现这个问题相关: https://github.com/dotnet/sdk/issues/1630
在等待这是固定在未来的版本中,我能够通过添加两个目标,以文件的csproj通过的建议来解决问题https://github.com/joperezr :
<Target Name="RemoveDesignTimeFacadesBeforeSGen" BeforeTargets="GenerateSerializationAssemblies">
<ItemGroup>
<ReferencePath Remove="@(_DesignTimeFacadeAssemblies_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)')" />
</ItemGroup>
<Message Importance="normal" Text="Adding back DesignTimeFacades from ReferencePath now that SGen has run." />
</Target>
在我而言,这个错误不是的在x86 / x64设置无效的组合,但由于试图建立一个项目,针对特定的.NET framework版本(V4.5.1),其参考组件没有被安装在构建服务器是由于。
以下两个条件的组合是负责的错误:
C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework
,一个名为V4.5.1文件夹不存在。 (带版本号,其中包括V3.5,V4.0,V4.5和其他文件夹, 出席了会议。) 此修复程序是安装的Windows 8.1的Windows软件开发工具包(SDK)的生成服务器上。 在安装向导中,在“选择要安装的功能”的步骤,我未选中所有复选框除一个用于“.NET框架4.5.1软件开发工具包”。
该安装造成失踪的V4.5.1文件夹中的参考大会\微软\ Framework.NETFramework文件夹运行被创建,并构建成功运行。
我今天遇到了同样的问题。 一期工程将不能建立在我的电脑上,但建立在其他PC的优良
我终于固定它通过执行以下操作:
右键单击出错的项目,进入属性
选择Build选项卡并到这是最后的选择“生成序列化程序集”我设置为关闭,该项目现在建立的罚款。
我有同样的问题,并观看输出屏幕给了我更多的细节。 从我发现了目标框架高于被允许对这种类型的项目(我是建设一个SQL Server CLR项目)。 该项目的目标框架设置为4.0。 改变这一回3.5固定我的问题。
戴夫
我升级项目从4.0到4.5.2,并安装在构建服务器上的Microsoft .NET Framework 4.5.2开发包。 之后,它的工作。 你必须对所有其他.NET版本开发包。
https://support.microsoft.com/en-us/help/2901951/the-microsoft--net-framework-4-5-2-developer-pack-for-windows-server-2
我有一个类似的问题,在命令行中VS或MSBuild的构建时,看到SGEN“格式不正确”的错误。 我的项目是64位,但MSBuild的坚持使用该工具的32位版本。 (我的一些同行解决此通过建设VS 2015年,但只安装了VS 2017年我已经和想保持这种方式。)
望着诊断生成输出,它看起来像SGEN从它的SdkToolsPath参数指定的目录下运行(对我来说: C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools\
)。 这是从TargetFrameworkSDKToolsDirectory分配。 综观目标文件,这个来自SDK40ToolsPath。 这是从的MSBuild的config文件设置。
我解决了这个编辑C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\15.0\Bin\MSBuild.exe.config
(需要管理员权限),设置SDK40ToolsPath财产使用
<property name="SDK40ToolsPath" value="$([MSBuild]::GetRegistryValueFromView('HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SDKs\NETFXSDK\4.6.2\WinSDK-NetFx40Tools-x64', 'InstallationFolder', null, RegistryView.Registry32))" />
(注:如果你正在寻找一个64位操作系统注册表的这条路,去HKLM \ SOFTWARE \ WOW6432Node \微软...)
主要的变化是,当然,86到x64使用64位工具。 我也改变了框架,是我们用什么(4.6.2)。 这可能意味着我们能够可靠地只用工具对64位项目和这个框架,有了这个变化。 不过,我希望这可以帮助别人运行到这个问题。 (我感到震惊和沮丧的MSBuild不会自动改变基础框架和架构的工具路径。)
就我而言,该解决方案在调试正确编译,但在只有一个项目一个发布错误。
使用这种https://social.msdn.microsoft.com/Forums/en-US/13d3cc7a-88dc-476c-8a15-fa2d4c59e5aa/sgen-an-attempt-was-made-to-load-an-assembly-with-一,不正确格式?论坛= netfx64bit ,我改变了项目PlatformTarget谁是与所有 的x86 CPU的问题。
我保持着混合平台的解决方案,并有可能在发布编译