相关疑难解决方法(0)

如何在Msbuild中将SGEN工具路径设置为目标3.5框架

我刚刚将一个项目从VS2008升级到了VS2010,但我仍然以3.5框架为目标.

在我的项目文件中,我有一个自定义任务来运行SGEN来生成我的XmlSerializers.dll.但是,正在运行的sgen版本的目标是4.0框架.因此,当我运行我的应用程序时,我收到错误消息:

"无法加载文件或程序集'XXXX.XXXX.XmlSerializers'或其依赖项之一.此程序集由比当前加载的运行时更新的运行时构建,无法加载."

Sgen任务看起来像这样:

  <Target Name="AfterBuild" DependsOnTargets="AssignTargetPaths;Compile;ResolveKeySource" Inputs="$(MSBuildAllProjects);@(IntermediateAssembly)" Outputs="$(OutputPath)$(_SGenDllName)">
    <!-- Delete the file because I can't figure out how to force the SGen task. -->
    <Delete Files="$(TargetDir)$(TargetName).XmlSerializers.dll" ContinueOnError="true" />
    <SGen BuildAssemblyName="$(TargetFileName)" BuildAssemblyPath="$(OutputPath)" References="@(ReferencePath)" ShouldGenerateSerializer="true" UseProxyTypes="false" KeyContainer="$(KeyContainerName)" KeyFile="$(KeyOriginatorFile)" DelaySign="$(DelaySign)" ToolPath="$(SGenToolPath)">
      <Output TaskParameter="SerializationAssembly" ItemName="SerializationAssembly" />
    </SGen>
  </Target>
Run Code Online (Sandbox Code Playgroud)

ToolPath ="$(SGenToolPath)".如何让它运行目标为3.5的版本?

这里有一个类似的问题,但它对我没什么帮助.

sgen visual-studio-2010

18
推荐指数
5
解决办法
2万
查看次数

VS 2010,TFS 2013 SGEN:尝试加载格式不正确的程序集

我正在进行tfs 2013构建定义的转换,我们最初使用的是tfs 2008.我有一个安装了TFS2013的新服务器,并且正在完成2013 xaml(工作流)定制的构建定义.但是,当我的TFS在任何Cpu配置的发布模式下构建时,我正面临一个错误,但是当我使用调试模式时它很好.我试过看了很多文章而无法找到任何解决方案,请在这里帮助我.这在我的本地机器上很好,但只在服务器中发生.

项目和细节

1)项目是.net framework 4.0

2)默认配置是"Any Cpu"

3)TFS 2013服务器是64位,Windows Server 2008 r2

构建定义

配置:任何CPU |发布

MsBuildPlatform:x86

错误:SGEN:尝试加载格式不正确的程序集:C:\ Windows\Microsoft.Net\assembly\GAC_64\System.Data\v4.0_4.0.0.0__b77a5c561934e089\System.Data.dll.

警告:C:\ Program Files(x86)\ MSBuild\12.0\bin\Microsoft.Common.CurrentVersion.targets(990):找不到框架".NETFramework,Version = v4.0"的引用程序集.要解决此问题,请为此框架版本安装SDK或Targeting Pack,或者将应用程序重新定位到已安装SDK或Targeting Pack的框架版本.请注意,程序集将从全局程序集缓存(GAC)中解析,并将用于代替引用程序集.因此,您的程序集可能无法正确定位到您想要的框架.

我安装了windos 8 SDK(仅限工具)和Windows框架4 x64,因为x86版本失败了

文件夹C:\ Program Files\Microsoft SDKs\Windows有v7.0文件夹C:\ Program Files(x86)\ Microsoft SDKs\Windows有v8.1A文件夹

我的本地机器在上面的路径中的Windows文件夹中有许多版本

我已检查但无法找到解决方案的相关文章列表

http://seravy.wordpress.com/2012/10/25/installing-net-4-5-and-not-windows-sdk-8/

http://blogs.msdn.com/b/windowssdk/archive/2009/09/16/windows-7-sdk-setup-common-installation-issues-and-fixes.aspx

运行MSBuild无法读取SDKToolsPath

http://dukelupus.wordpress.com/2008/02/05/task-failed-because-sgenexe-was-not-found-solution/

如何修复Visual Studio编译错误,"处理器架构之间不匹配"?

TFS 2010为.Net 3.5应用程序创建.Net 4.0 XmlSerializers DLL

那我该怎么做才能解决这个错误呢?

msbuild tfs build-process build tfs2013

7
推荐指数
1
解决办法
6672
查看次数

MSBuild使用不正确版本的sgen.exe生成XmlSerializer dll?

我正在使用TeamCity运行MSBuild脚本,该脚本将清理并重建我们的解决方案之一。当我部署由该过程生成的dll时,Web服务器返回有关[MyType] .XmlSerializer.dll的错误,该错误是“此程序集由比当前加载的运行时新的运行时构建,无法加载。” 到目前为止,这是我的笔记:

  • 该解决方案是针对.Net Framework 3.5的Visual Studio 2010解决方案。
  • TeamCity将模仿这一点。它使用MSBuild版本-“ .Net Framework 4.0”和MSBuild ToolsVersion-“ 3.5”进行设置。这告诉TeamCity使用MSBuild 4.0,但要以3.5 Framework为目标。由于我们使用的是Visual Studio 2010,因此必须使用MSBuild 4.0或它会产生其他错误(与VS2010使用的新警告代码有关)。 这似乎工作正常,并且为大多数dll生成.Net 3.5 dll。
  • MSBuild进程调出resgen.exe和sgen.exe分别生成资源文件和XmlSerializer文件。由于我们使用的是MSBuild 4.0,因此它将查找Windows SDK 7.1。我已经安装了该版本。我还安装了Windows SDK 7.0。
  • 无论我针对的框架是什么,构建过程都会在WinSDK 7.1下调用sgen.exe,并生成.Net Framework 4.0 [MyType] .XmlSerializer.dlls。它是否正确?

据我所知,我的选择是:

  • 如果我改变目标是针对较旧的v3.5 MSBuild工具,则VS2010已在解决方案文件中添加了警告,警告该文件使MSBuild 3.5停止运行并破坏了构建。这不是真正的选择。
  • 尝试将注册表中的路径更改为本主题中讨论的工具,但看不到任何更改。
  • 在服务器上安装VS2010。显然,VS2010使用了中间的WinSDK v7.0A,而获得此功能的唯一方法是在服务器上安装VS2010。这不是真正的选择。
  • 更改项目以不生成XmlSerializer.dlls。这行得通,但看起来有点俗气,因为它并不能真正解决问题,我也担心性能问题。

我想念什么吗?我还有其他选择吗?

.net msbuild teamcity visual-studio

6
推荐指数
1
解决办法
6385
查看次数