2015-02-07 73 views
0

我在VS 2013中创建了一个ASP.NET MVC 4网站。我依赖的库程序集之一包装了原生dll。我将该本地DLL复制到项目的生成后事件中的项目输出目录中。这使我可以在IIS Express下运行该网站,并且工作正常。但是,当我去发布站点时,原生DLL会留在泥土中。理想情况下,我希望发布Win32或x64原生dll,具体取决于Visual Studio中当前选择的平台。任何人都知道如何让本机DLL被发布命令舀起来?如何获取ASP.NET MVC发布到本地二进制拷贝到bin目录

顺便说一句我已经尝试过将DLL添加到项目中并将生成操作设置为无并将“复制到输出目录”设置为始终复制的技巧。虽然这有效,但它只适用于本地dll的一个特定位。这并不理想。

回答

1

你可以通过手工编辑.csproj(或.vbproj)文件来添加条件。

  1. 保存项目中的任何工作。
  2. 右键单击solution explorer中的项目节点,然后单击Unload Project
  3. 整个项目将折叠成一个节点。右键单击该节点并选择Edit <Project Name>.csproj(或.vbproj)。

向下滚动并查找您用于的DLL。它应该看起来像这样:

<ItemGroup> 
    <Content Include="bin\Release\x86\My.dll"> 
     <CopyToOutputDirectory>Always</CopyToOutputDirectory> 
    </Content> 
</ItemGroup> 

复制它并添加一个条件。在这种情况下,您想要基于平台进行更改。这是一种方法。请注意,您应该分析项目文件以确定为特定配置添加的最佳条件。您还应该更改目录以匹配您的32位和64位DLL文件的(相对)位置。

<ItemGroup Condition=" '$(PlatformTarget)' == 'x86' "> 
    <Content Include="bin\$(Configuration)\x86\My.dll"> 
     <CopyToOutputDirectory>Always</CopyToOutputDirectory> 
    </Content> 
</ItemGroup> 
<ItemGroup Condition=" '$(PlatformTarget)' == 'x64' "> 
    <Content Include="bin\$(Configuration)\x64\My.dll"> 
     <CopyToOutputDirectory>Always</CopyToOutputDirectory> 
    </Content> 
</ItemGroup> 

Visual Studio中没有正确显示这(它会显示一个破碎的DLL链接和有效的DLL链接),但是放心这个方法的功能。这也有助于理解Visual Studio项目文件不过是一个MSBuild配置文件。因此,尽管Visual Studio不支持添加或显示条件或其他MSBuild选项的方法,但如果根据MSBuild文档进行配置,它们都将正常运行。

+0

谢谢!这很好地处理平台特定的dll。我确实收到警告,我用' false'消除了。 – 2015-02-07 21:35:09

+0

谢谢,我不知道''元素。我想还有一个[''元素](http://stackoverflow.com/questions/2961753/how-to-hide-files-generated-by-custom-tool-in-visual-studio#3090168)做同样的事情。但是,它们似乎不适用于有条件的项目引用,至少在VS2012中不适用。 – NightOwl888 2015-02-11 09:37:15

0

你需要在你的项目中的DLL,然后一旦它的存在右键单击该DLL,选择属性,然后确保“复制到输出目录”设置为“一直拷贝”