VS2010 DLL 不更新

VS2010 DLLs not updating

我有一个解决方案(ASP.NET,.NET 4.0)似乎没有正确更新其 dll。我注意到,当我在进行更改后对其进行编译时,它看不到我所做的添加。

我最近将解决方案的目标平台切换到 x86,因为我们现在将它部署到 x64 服务器上,而我现在在 x64 Win7 机器上维护它。 (我不知道这是否与它有关,见下文。)在我隔离问题之后,当我测试时,我发现如果我在其中一个 aspx 文件上选择 "view in browser",它突然看到了我之前所做的更改。我梳理了主项目的 bin 文件夹中的目录,我注意到 dll 被保存到两个不同的位置:bin 文件夹的根目录和 bin/x86/debug/。当我简单地编译解决方案时,第一个位置得到更新,当我在其中一个 aspx 文件上使用 "view in browser" 时,第二个位置得到更新。

有人知道可能导致此行为的错误设置吗?

更新:@Vinkal 提供的答案让我相信 Debug 正在寻找编译代码的 bin/ 文件夹,而不是代码被编译到的 bin/x86/debug/。这可能是核心问题吗?

I combed through the directories in the main project's bin folder, and I noticed dlls were being saved to two different places: the root of the bin folder, and bin/x86/debug/. The first location was getting updated when I simply compiled the solution, and the second was getting updated when I used "view in browser" on one of the aspx files.

检查 Configutation Manager 选择了什么 platform,如下面的屏幕截图#1 所示。

屏幕截图 #1:配置管理器

如果您创建新的 platform(这里是 x86),Output Path 会自动设置为 bin\x86\Debug\。请参阅下面的屏幕截图。

屏幕截图 #2:选择项目属性时构建设置

所以当你编译项目时,二进制文件将根据 Output Path 复制(在我的例子中, bin\x86\Debug\Platform x86 中设置的 Platform Target ).如下图所示确认,编译时会复制所有二进制文件。正如您所提到的,当您编译解决方案时,bin 文件夹的根目录 正在更新。因此,对于您在 Platform Target

中设置的 Platform (Any CPU, x86 or x64),您的项目 Output Path 必须设置为 Bin 文件夹的根目录

注意:如果设置Post-Build event commmand复制Binaries,也会复制到Post-Build event command中指定的Path

在浏览器中查看: 当使用 View in browser 打开页面时,将再次编译页面并根据 Output Path 中指定的 Output Path 复制二进制文件=30=] 如 屏幕截图 #2 所示。正如您提到的,当您在浏览器中查看页面时 bin\x86\Debug\ 会更新,这表明 Output Path 在您的 Project Properties 中设置为 bin\x86\Debug\,在下面的屏幕截图中,当使用 View in Browser 打开页面时,二进制文件将转到 Bin 文件夹,平台选择为 Any CPU

Post-build event command:如果你也设置了Post-build event command,如下图,将路径复制到不同的位置,在这两种情况下(即编译和 View in Browser 时),它将被复制到 Post-build event command

中指定的 Path

编辑:

如前所述here,使用<probing>元素:

您可以使用 应用程序配置文件 中的元素来指定运行时在查找 assembly 时应搜索的子目录。以下示例显示了如何指定运行时应搜索的目录。

<configuration>
   <runtime>
      <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
         <probing privatePath="bin;bin2\subbin;bin3"/>
      </assemblyBinding>
   </runtime>
</configuration>

privatePath 属性包含运行时应搜索的目录 assemblies。如果应用程序位于 C:\Program Files\MyApp,运行时将在 C:\Program Files\MyApp\Bin、C:\Program 中查找未指定代码库的 assemblies Files\MyApp\Bin2\Subbin,和 C:\Program Files\MyApp\Bin3。 privatePath 中指定的目录必须是应用程序基目录的子目录

所以在你的情况下,修改 web.config 如下所示

<configuration>
   <runtime>
      <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
         <probing privatePath="bin;bin\x86\debug"/>
      </assemblyBinding>
   </runtime>
</configuration>

您可以尝试通过在工具 -> 选项 -> 调试 -> 符号中更改不同的配置来解决这个问题