2015-02-24 48 views
1

我有一个解决方案(ASP.NET,.NET 4.0),似乎没有正确更新其DLL。我注意到,当我在修改之后编译它时,并没有看到我添加的内容。VS2010 DLL不更新

我最近将解决方案的目标平台切换到x86,因为我们现在将它部署到x64服务器上,并且我现在将它维护在x64 Win7机器上。 (我不知道这可能与它有什么关系,请参阅下文。)在我分离出问题后,当我测试时,发现如果我在其中一个aspx文件中选择了“在浏览器中查看”它突然看到了我之前所做的改变。我梳理了主项目的bin文件夹中的目录,我发现dll被保存到了两个不同的位置:bin文件夹的根目录和bin/x86/debug /。当我简单编译解决方案时,第一个位置得到更新,第二个位置在我使用其中一个aspx文件的“在浏览器中查看”时得到更新。

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

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

+0

右键点击你的解决方案,点击'Configuration Manager',检查你的项目是否被选中建立。 – dotctor 2015-02-24 20:53:19

+0

你有任何本地程序集?任何不是.NET的东西? – beautifulcoder 2015-02-24 20:54:32

+0

@dotctor,解决方案中的所有项目都将被检查以构建在解决方案的配置管理器中。 – 2015-02-24 20:56:29

回答

4

我通过在主项目的bin文件夹的目录梳理,并 我注意到的DLL被保存到两个不同的地方:中 根bin文件夹,和斌/ 86 /调试/。当我简单地编译解决方案时,第一个位置变得更新了 ,第二个位置变为当我在其中一个aspx 文件中使用“在浏览器中查看”时更新的 。

检查Configutation Manager关于如何选择platform如下面的屏幕快照#1所示。

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

Configuration Manager

如果你创建新的 platform(这里 x86

Output Path自动设置为bin\x86\Debug\。请参阅下面的截图。

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

Build Event Option from Project Properties

所以,当你编译项目,二进制文件会根据我的情况Output Path(这里被复制,bin\x86\Debug\对于在Platform Target中设置的Platform x86)。按照下面的屏幕截图所示进行确认,在编译时所有二进制文件都将被复制。正如您所提到的,当您编译解决方案时,bin文件夹的根目录正在更新。所以,你的项目Output Path必须设置为根Bin文件夹为您在Platform Target

注意设置任何Platform (Any CPU, x86 or x64)如果Post-Build event commmand设置为复制二进制文件,它也将被复制到指定的PathPost-Build event command

enter image description here

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

enter image description here

生成后事件命令:如果您还设置了Post-build event command,如下图所示的屏幕截图,该路径复制在不同的位置,在这两种情况下(即当你编译和View in Browser),它会被复制到指定的PathPost-build event command

enter image description here

编辑:

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

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

<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 Files \ MyApp \ Bin2 \ Subbin中指定代码库的assemblies,和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> 
+0

感谢您的博览会和图片!他们总是帮助。 我确实检查了我的解决方案,而且这一切似乎都是在您展示的过程中发生的。构建项目将它们发送到bin \ x86 \ Debug \,但运行“在浏览器中查看”将项目编译为bin \。我*不*有任何建立后的事件。 从行为和你的描述,我想调试正在看bin \编译的代码和pdb文件。你知道这是为什么,以及如何告诉它看看x86文件夹? – 2015-03-02 16:02:09

+0

如果Debug正在查看bin文件夹,您是否可以将'Output Path'从bin \ x86 \ Debug \更改为\ bin,以便构建项目将它们发送到\ bin文件夹而不是\ bin \ x86 \ debug? – Vinkal 2015-03-05 18:27:16

0

你可能会尝试通过在工具更换不同的配置来解决这个问题 - >选项 - >调试 - >符号