我们的解决方案包括向付费用户提供源代码的程序集,但其中2个是封闭源代码。
这允许用户学习甚至修改其他人的来源。他们通常使用Visual Studio编译源代码。
我们发现了一个问题,即使用Visual Studio 2008编译的程序集在运行时与命令行上由MSBuild编译的程序集不兼容。
使用Nant和MSBuild完全自动化构建和部署过程,以预编译开源和闭源。
有趣的是,出现的运行时问题始终位于同一位置和相同的代码行。
它失败,结构字段上的MissingFieldException例外,它是一个固定的字节数组缓冲区。它是在不安全的代码中访问的。这对我们来说是莫名其妙的,因为在编译时检查该字段是否存在,除了上面编译的代码之外,代码不会改变。
但请记住,代码本身并不是问题,因为如果我们从命令行编译所有程序集,那么它们运行正常。或者,如果我们在Visual Studio中编译所有程序集,它们也可以正常运行。
仅当通过MSBuild构建的2个程序集与通过Visual Studio构建的其余程序集混合时,才会出现此问题。
我们已经三重检查了没有涉及#if编译开关。事实上,代码使用git进行sha1校验和,并确认是相同的源代码。
我们完全不知道为什么他们会不相容。 Visual Studio是否使用MSBuild本身进行构建?它们如何在运行时不兼容?