0

我无法获得 -fixednames 开关来为文件背后的 cs 代码创建 dll。bin文件夹中的文件是编译的aspx页面,但是文件后面的代码都编译成一个很大的websitename.dll文件。

这是我的开关命令。aspnet_compiler -v / -p E:\Source\DotNet4\mysolution\website -f -d -fixednames E:\Source\DotNet4\CompiledWebSite

这会在 bin 文件夹中生成许多文件。

website.dll 和 website.pdb(包含后面的代码) myform1.aspx.643c7876.dll(编译的 aspx 布局 ui)

我一遍又一遍地测试了这一点,以确保我没有遗漏任何东西。测试是在 myform1.aspx 上放置一个标签,并在代码隐藏中用一些文本填充标签。使用上述开关编译网站并部署网站。

更改 myform1 代码隐藏并更改标签文本。编译并仅将 myform1.aspx.643c7876.dll 部署到网站。结果:标签仍然相同。现在部署 website.dll 和 pdb 并更改标签。

谁能告诉我如何获得 -fixednames 来为代码隐藏创建单 dll?

4

1 回答 1

1

我认为真正的区别在于 Web 应用程序与网站的概念。我在 Visual Studio 中创建了两个相同的应用程序 - 一个作为 Web 应用程序,一个作为网站。该页面是default.aspx,类是“_Default”。当我在Web Application上运行“aspnet_compiler -v / -p . -f -d -fixednames ..\CompiledSite”时,新 bin 中有 2 个 dll,一个名为 WebApplication1.dll,它包含 _Default 类,并且一个名为 App_Web_default.aspx.cdcab7d2.dll,其中包含标记。当我使用完全相同的命令行编译网站时,它只创建了一个 DLL,其中包含标记和 _Default 类。

不要问我它是如何知道两者之间的区别的——我唯一能想到的就是 Web 应用程序存在 csproj 文件这一事实。

从我的阅读和理解的方式来看,aspnet_compiler 是为网站项目设计的,而不是 Web 应用程序项目,这就是我假设您使用网站的原因。

如果您需要将应用程序设计为单页 DLL,请尝试构建一个新的网站项目,将 .aspx 和 .aspx.cs 文件添加到该网站,并使用您的 aspnet_compiler 命令进行编译,看看会发生什么。您可以从一页或两页的样本开始。

您不需要实际测试和重新编译等以确定它是否有效 - 只需查看 Reflector 中的 DLL 文件,并查看您的类所在的位置 - 如果它们与标记位于同一个 DLL 中,那么它就有效,否则,它们必须在集中式应用程序 DLL 中。

希望这一切都说得通——祝你好运。

于 2010-04-29T13:50:21.667 回答