生成Xml序列化程序集作为我的构建的一部分

这段代码产生了FileNotFoundException,但最终运行没有问题:

void ReadXml()

{

XmlSerializer serializer = new XmlSerializer(typeof(MyClass));

//...

}

这是例外:


mscorlib.dll中发生类型为’System.IO.FileNotFoundException’的第一次机会异常

附加信息:无法加载文件或程序集’MyAssembly.XmlSerializers,版本=

1.4.3190.15950,区域性=中性,PublicKeyToken =空’或其依赖项之一。该系统找不到指定的文件。


我可以使用sgen.exe手动生成它,从而减轻了异常。


回答:

这是通过修改.CSPROJ文件中的MSBUILD脚本来设法做到的:

首先,将.CSPROJ文件作为文件而不是作为项目打开。滚动到文件底部,直到在Project标记关闭之前找到以下注释掉的代码:

<!-- To modify your build process, add your task inside one of the targets below and uncomment it. Other similar extension points exist, see Microsoft.Common.targets.

<Target Name="BeforeBuild">

</Target>

<Target Name="AfterBuild">

</Target>

-->

现在,我们只需插入自己的AfterBuild目标即可删除我们自己的所有现有XmlSerializer和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="$(TargetFrameworkSDKToolsDirectory)"

Platform="$(Platform)">

<Output

TaskParameter="SerializationAssembly"

ItemName="SerializationAssembly" />

</SGen>

</Target>

这对我行得通。

以上是 生成Xml序列化程序集作为我的构建的一部分 的全部内容, 来源链接: utcz.com/qa/414316.html

回到顶部