【问题标题】:How to get ASP.NET MVC Publish to copy over a native binary to the bin dir如何让 ASP.NET MVC Publish 将本机二进制文件复制到 bin 目录
【发布时间】:2015-02-07 03:01:11
【问题描述】:

我在 VS 2013 中创建了一个 ASP.NET MVC 4 网站。我依赖的库程序集之一包装了本机 dll。我在项目的构建后事件中将该本地 DLL 复制到项目的输出目录。这使我可以在 IIS Express 下运行该网站,并且运行良好。但是,当我去发布站点时,本机 DLL 被留在了泥土中。理想情况下,我希望根据 Visual Studio 中当前选择的平台发布 Win32 或 x64 本机 dll。有人知道如何让 Publish 命令获取本地 DLL 吗?

顺便说一句,我尝试了将 DLL “添加链接”到项目并将构建操作设置为无并将“复制到输出目录”设置为始终复制的技巧。虽然这有效,但它仅适用于本机 dll 的一个特定位数。这不太理想。

【问题讨论】:

    标签: asp.net asp.net-mvc web-deployment


    【解决方案1】:

    您可以通过手动编辑将条件添加到.csproj(或.vbproj)文件。

    1. 保存项目中的所有工作。
    2. 在解决方案资源管理器中右键单击项目节点,然后单击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 文档进行配置,它们都将正常工作。

    【讨论】:

    • 谢谢!这可以很好地处理平台特定的 dll。我确实收到了一个警告,我用&lt;InProject&gt;false&lt;/InProject&gt; 消除了这个警告。
    • 谢谢,我不知道&lt;InProject&gt; 元素。我想还有一个&lt;Visible&gt; element 做同样的事情。但是,它们似乎不适用于条件项目引用,至少在 VS2012 中没有。
    【解决方案2】:

    您需要将 dll 包含在您的项目中,然后在该 dll 上单击鼠标右键,选择“属性”,然后确保“复制到输出目录”设置为“始终复制”

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-04-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多