我有一个构建过程,它使用我的VS 2008 .NET 2.0 ASP.NET项目并使用MSBuild构建它。该项目包含ASPX文件和Web服务,还连接到另一个Web服务;)
除了MSBuild将* .XmlSerializers.dll程序集文件放入_PublishedWebsites \ MySite文件夹而不是_PublishedWebsites \ MySite \ bin之外,所有内容似乎都运行良好,就像它与其他dll一样。
* .XmlSerializers.dll程序集文件不在bin文件夹中是否重要?
或者我应该在MSBuild完成后使用我的构建过程将* .XmlSerializers.dll程序集复制到bin文件夹中吗?
答案 0 :(得分:6)
除非您要从程序集中序列化和反序列化类型,否则不需要此程序集。编译器生成此程序集,以使应用程序在启动并运行后不必生成它。
如果您打算进行序列化,请保留程序集,因为它有助于提高性能。如果您不打算进行任何序列化,请随意忽略它或完全删除它。
有关此做法的详情,请参阅XML Serializer Generator Tool:
XML Serializer Generator创建 一个XML序列化程序集 按顺序在指定程序集中键入 提高启动性能 串行化时的XmlSerializer或 反序列化指定的对象 类型。
答案 1 :(得分:2)
是的,XmlSerializers程序集不在bin目录中并不重要。使用Fusion Log Viewer我确认我怀疑DLL在Web应用程序根目录中没有被加载。
要更正此问题,您可以添加将文件移动到正确位置的AfterBuild目标。我使用以下代码段,但较新版本的MsBuild有一个Move任务:
<Target Name="AfterBuild">
<!-- Don't do this when the final destination is the same as build destination (local builds) -->
<Exec Command="move /Y "$(WebProjectOutputDir)\$(AssemblyName).XmlSerializers.dll" "$(WebProjectOutputDir)\bin"" Condition="'$(OutDir)' != '$(OutputPath)'"/>
</Target>
注意:如果您正在从同一目录构建和运行Web应用程序(通常是在开发计算机上本地运行的情况)并且将项目设置“生成序列化程序集”设置为“开”,则会生成文件在bin目录中。这就是我在这种情况下将任务配置为不执行的原因。
我可以简单地确保该文件存在,但是我想确保构建失败,如果由于某种原因文件在集成构建期间不在预期的位置。