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>
您可以尝试通过在工具 -> 选项 -> 调试 -> 符号中更改不同的配置来解决这个问题
我有一个解决方案(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>
您可以尝试通过在工具 -> 选项 -> 调试 -> 符号中更改不同的配置来解决这个问题