相关疑难解决方法(0)

XmlSerializer在构造函数中给出FileNotFoundException

当我尝试序列化类型时,我一直在使用的应用程序失败.

像这样的陈述

XmlSerializer lizer = new XmlSerializer(typeof(MyType));
Run Code Online (Sandbox Code Playgroud)

生产:

System.IO.FileNotFoundException occurred
  Message="Could not load file or assembly '[Containing Assembly of MyType].XmlSerializers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. The system cannot find the file specified."
  Source="mscorlib"
  FileName="[Containing Assembly of MyType].XmlSerializers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
  FusionLog=""
  StackTrace:
       at System.Reflection.Assembly._nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, Assembly locationHint, StackCrawlMark& stackMark, Boolean throwOnFileNotFound, Boolean forIntrospection)
       at System.Reflection.Assembly.nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, Assembly locationHint, StackCrawlMark& stackMark, Boolean throwOnFileNotFound, Boolean forIntrospection)
Run Code Online (Sandbox Code Playgroud)

我没有为我的班级定义任何特殊的序列化器.

我该如何解决这个问题?

c# xml-serialization

340
推荐指数
9
解决办法
12万
查看次数

System.InvalidOperationException:无法生成临时类(result = 1)

我使用.net 3.5开发了一个应用程序,并将它作为.exe部署在具有相同环境的许多机器上.但是,在一台特定的机器上,我收到以下错误.堆栈跟踪:


有关调用实时(JIT)调试而不是此对话框的详细信息,请参阅此消息的结尾.

System.InvalidOperationException: Unable to generate a temporary class (result=1).
error CS2001: Source file 'C:\WINDOWS\TEMP\wz58eig4.0.cs' could not be found
error CS2008: No inputs specified

   at System.Xml.Serialization.Compiler.Compile(Assembly parent, String ns, XmlSerializerCompilerParameters xmlParameters, Evidence evidence)
   at System.Xml.Serialization.TempAssembly.GenerateAssembly(XmlMapping[] xmlMappings, Type[] types, String defaultNamespace, Evidence evidence, XmlSerializerCompilerParameters parameters, Assembly assembly, Hashtable assemblies)
   at System.Xml.Serialization.TempAssembly..ctor(XmlMapping[] xmlMappings, Type[] types, String defaultNamespace, String location, Evidence evidence)
   at System.Xml.Serialization.XmlSerializer.GetSerializersFromCache(XmlMapping[] mappings, Type type)
   at System.Xml.Serialization.XmlSerializer.FromMappings(XmlMapping[] mappings, Type type)
   at System.Web.Services.Protocols.SoapClientType..ctor(Type type)
   at System.Web.Services.Protocols.SoapHttpClientProtocol..ctor()
   at SSOClient..ctor()
   at sc.tradesvc.SSOManager..ctor()
   at …
Run Code Online (Sandbox Code Playgroud)

c# input

61
推荐指数
5
解决办法
7万
查看次数

VS.NET 2010/MSBUILD可以为.NET 3.5 SP1生成XmlSerializers吗?

我刚刚将包含WinForms,通用库和Web应用程序的VS 2008解决方案升级到VS 2010,但所有项目仍然针对.NET 3.5 SP 1.我使用此技术为我的常用库生成XmlSerializers.WinForms应用程序运行正常.当我的Web应用程序尝试使用引用相同XmlSerializers的这些库运行时,它会抛出以下内容:

'/ WebSubscribers'应用程序中的服务器错误.无法加载文件或程序集"Ceoimage.Basecamp.XmlSerializers"或其依赖项之一.此程序集由比当前加载的运行时更新的运行时构建,无法加载.描述:执行当前Web请求期间发生未处理的异常.请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息.

异常详细信息:System.BadImageFormatException:无法加载文件或程序集"Ceoimage.Basecamp.XmlSerializers"或其依赖项之一.此程序集由比当前加载的运行时更新的运行时构建,无法加载.

我已经使用.NET Reflector查看了XmlSerializer的引用,并看到它引用了2.0和4.0版本mscorlib以及3.5和4.0版本System.Data.Linq.奇怪的是,它只使用4.0版本System.Xml.那可能是我的问题.

如何使用这些XmlSerializers运行Web应用程序?当我简单地删除那些XmlSerializers时,Web应用程序运行正常.这是一个选项,但是如何强制MSBUILD为特定版本的CLR创建序列化程序?

这是我添加到项目文件的MSBuild任务,它强制创建XmlSerializers:

<Target Name="AfterBuild" DependsOnTargets="AssignTargetPaths;Compile;ResolveKeySource" Inputs="$(MSBuildAllProjects);@(IntermediateAssembly)" Outputs="$(OutputPath)$(_SGenDllName)">
 <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)

msbuild sgen visual-studio-2010 .net-reflector xmlserializer

12
推荐指数
2
解决办法
2864
查看次数

数据是否可以将序列化程序用于任何第三方Web服务

我有一个大型的第三方网络服务; reference.cs是33 MB.使用Visual Studio 2017,代理使用XML Serializer,在创建通道时会导致5秒的延迟.我在微软开了一个案例,他们向我展示了如何修改reference.cs以使用Datacontract序列化器.在同一台机器上,通道创建时间为20毫秒,完全符合我的需求.

不幸的是,消息失败并带来微小的差异,微软的支持也无济于事.

有已知的限制吗?我应该寻找的任何模式确保它根本不起作用我应该开始使用HTTP请求重写所有内容?

导致整体延迟的实际方法:

public XmlMembersMapping ImportMembersMapping(string elementName, string ns,
  XmlReflectionMember[] members, bool hasWrapperElement, bool writeAccessors,
  bool validate, XmlMappingAccess access) {
  ElementAccessor element = new ElementAccessor();
  element.IsSoap = true;
  element.Name = elementName == null || elementName.Length == 0 ? elementName : 
    XmlConvert.EncodeLocalName(elementName);
}
Run Code Online (Sandbox Code Playgroud)

c# wcf datacontractserializer

11
推荐指数
1
解决办法
408
查看次数

提高XmlSerializer的性能

我用a XmlSerializer来序列化/反序列化一些对象.问题在于性能.在进行性能分析时,使用XmlSerializermake我们的应用程序启动时间要长2秒.我们缓存我们的XmlSerializer并重用它们.我们不能使用sgen.exe,因为我们正在创建XmlSerializer XmlAttributeOverrides.

我尝试使用像Json.Net这样的序列化替代方案,起初它的工作很棒.问题是我们需要向后兼容,因此需要正确解析已生成的所有xml.此外,对象序列化输出必须是Xml.

总结一下:

  1. 我收到XmlSerializer序列化的Xml数据.
  2. 我需要反序列化Xml数据并将其转换为对象.
  3. 我需要将对象序列化为Xml(理想情况下是Xml格式,就像XmlSerializer所做的那样)

c# xml serialization json.net

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

MyAssembly.XmlSerializers.dll 未生成

我正在使用 WCF 测试客户端向服务发出请求,但是出现以下错误:

Could not load file or assembly 'aDoc_Client.XmlSerializers' or one of its dependencies. The system cannot find the file specified.

Server stack trace: 
   at System.ServiceModel.Channels.ServiceChannel.ThrowIfFaultUnderstood(Message reply, MessageFault fault, String action, MessageVersion version, FaultConverter faultConverter)
   at System.ServiceModel.Channels.ServiceChannel.HandleReply(ProxyOperationRuntime operation, ProxyRpc& rpc)
   at System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout)
   at System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs)
   at System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation)
   at System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message)

Exception rethrown at [0]: 
   at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, …
Run Code Online (Sandbox Code Playgroud)

c# xml wcf sgen xmlserializer

5
推荐指数
1
解决办法
1911
查看次数

MSB6003无法运行指定的任务可执行文件"sgen.exe".文件名或扩展名太长

在Windows 10上运行VS 2017 15.5.3.

获取此通用错误"指定的任务可执行文件"sgen.exe"无法运行.文件名或扩展名太长"在Release配置和X64平台中构建项目时.但它在Debug配置和Any CPU平台上构建良好.

https://developercommunity.visualstudio.com/content/problem/98090/vs-2017-153-error-the-specified-task-executable-sg.html中所述

能够构建它但是在将"生成序列化组件"设置为OFF之后.

不要认为文件名很长.有人会对此有所了解吗?

最好的祝福,

Damodar

c# msbuild visual-studio-2017

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

XmlSerializer找不到文件C:\ Windows\Temp\*.dll

我有一个ASP.NET 2.0 Web应用程序在一个众所周知的Web托管提供商的共享服务器上运行.偶尔我似乎得到这样的错误:

找不到文件'C:\ WINDOWS\TEMP\lxnmfrsz.dll'.描述:执行当前Web请求期间发生未处理的异常.请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息.

异常详细信息:System.IO.FileNotFoundException:找不到文件'C:\ WINDOWS\TEMP\lxnmfrsz.dll'.

我四处寻找,似乎这是一个常见的问题.一种解决方案是清除临时文件夹或重新启动IIS.由于我不能在我不拥有的服务器上访问这些东西,所以这些并不是真正的选择.我已经尝试使用web.config中的指令将temp目录设置为其他目录,但它似乎仍然使用默认的临时目录.还有其他方法可以更改临时目录和/或解决此问题吗?

c# asp.net xml-serialization

4
推荐指数
1
解决办法
4209
查看次数

使用Sgen和ILMerge预生成XmlSerializers.阵列麻烦

我广泛使用XmlSerializer而不是允许.NET在运行时生成必要的序列化程序集,我想提前生成这些程序集并将它们与我的应用程序捆绑在一起.我能够使用Sgen在构建时生成这些程序集.另外,我必须为我将序列化的每个数组类型单独运行Sgen(使用sgen/t:Foo []).最后,我使用ILMerge将数组类型序列化类合并到Foo.XmlSerializers.dll程序集中.我已经用ildasm验证了Foo.XmlSErializers.dll确实包含了所有合并的类.

在运行时,.NET从Foo.XmlSerializers.dll成功加载FooSerializer,而不调用csc并生成临时程序集.但是,.NET无法从同一个dll加载ArrayOfFooSerializer,实际上会调用csc.

如何成功预生成阵列的序列化类型?

考虑以下2个程序集及其简化内容:

汇编:MyApp.exe

public class MyApp
{
    public static int Main(string[] args)
    {
        new XmlSerializer(typeof(Foo));
        new XmlSerializer(typeof(Foo[]));
    }
}
Run Code Online (Sandbox Code Playgroud)

汇编:Foo.dll

public class Foo
{

}
Run Code Online (Sandbox Code Playgroud)

更多信息:

以下app.config导致将与XmlSerialization相关的事件添加到事件日志中

<configuration>
  <system.diagnostics> 
    <switches> 
      <add name="XmlSerialization.PregenEventLog" value="1" />
      <add name="XmlSerialization.Compilation" value="1" />
    </switches> 
  </system.diagnostics>
</configuration>
Run Code Online (Sandbox Code Playgroud)

我看不到Foo类型的事件.我看到Foo []的以下消息:

预生成的序列化程序'Foo.XmlSerializers'已过期.您需要为'Foo []'重新生成序列化程序.

.net xml ilmerge sgen xml-serialization

4
推荐指数
1
解决办法
2625
查看次数

SGEN错误反映类型

我已经实现了在生成一个Xml序列化程序集的接受答案中提到的更改作为我的构建的一部分

<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)" Platform="$(Platform)">
      <Output TaskParameter="SerializationAssembly" ItemName="SerializationAssembly" />
   </SGen>
</Target>
Run Code Online (Sandbox Code Playgroud)

构建exe项目时出现错误信息:

错误14反映类型'myNamespace.myAssembly.myForm.MicroContact'时出错.C:\ dev\src\myClient\myClient\SGEN myClient

这是MicroContact的代码(这里没有什么独特之处):

Public Class MicroContact
    Implements IComparable

    Private _id As Long
    Private _name As String

    Public Property Id() As Long
        Get
            Return _id
        End Get
        Set(ByVal value As Long)
            _id = …
Run Code Online (Sandbox Code Playgroud)

.net sgen xml-serialization build-error

4
推荐指数
1
解决办法
3347
查看次数