asp.net将第三方dll部署到bin文件夹

时间:2018-05-10 13:29:47

标签: c# asp.net dll msbuild bin

背景

我创建了一个ASP.NET webforms(4.6)网站,其中包含一些第三方组件。为了使其工作,我创建了一个包含所需DLL的SharedResources文件夹。我添加了一个引用,这些DLL在发布时被复制到BIN - GREAT。但是还有一些其他的DLL无法引用,因为它们不是有效的程序集或COM组件。

我的问题

如何添加到文件夹(SharedResources \ 3rdParty)中的build,dll,这样当我点击“发布”#39;它将所有这些dll转储到网站的bin文件夹中。

替代方法

(试图避免这种情况) 我已将dll Build操作设置为"内容 - 始终复制"这给了我一个〜\ SharedResources \ 3rdParty \中的DLL文件夹,然后应用程序抱怨丢失了dll,所以我手动将它们复制到bin中 - 这可能是对的!

由于

2 个答案:

答案 0 :(得分:0)

右键单击您的项目转到属性,然后在构建事件选项卡中将其粘贴到您的预构建事件命令行:copy $(ProjectDir)SharedResources \ 3rdParty * .dll $(ProjectDir)$(OutDir)

答案 1 :(得分:0)

当您发布网站时,这将不起作用。您将必须在项目文件或单独的目标文件中创建自己的目标,并按如下所示进行调用-

添加关注者-

<ItemGroup>
    <ThirdPartyDllDependencies Include="$(SolutionDir)..\..\Lib\ThirdPartyDll\*.dll" SkipUnchangedFiles="true" />
</ItemGroup>

    <Target Name="PublishThirdPartyDllDependencies">
    <Copy SourceFiles="@(ThirdPartyDllDependencies)" DestinationFolder="$(OutDir)\" />
    <Copy SourceFiles="@(ThirdPartyDllDependencies)" DestinationFolder="$(WebProjectOutputDir)\bin\" />    
</Target>


<!-- This target is responsible for adding the ThirdPartyDll and dependencies to the bin directory while Publishing the website. -->
<Target Name="CustomCollectFiles">
    <ItemGroup>
        <_CustomFiles Include="$(SolutionDir)..\..\Lib\ThirdPartyDll\ThirdPartyDll11\64Bit\*.dll" />
            <FilesForPackagingFromProject  Include="%(_CustomFiles.Identity)">
                <DestinationRelativePath>$(WebProjectOutputDir)\bin\%(RecursiveDir)%(Filename)%(Extension)</DestinationRelativePath>
                <DestinationRelativePath>$(OutDir)\%(RecursiveDir)%(Filename)%(Extension)</DestinationRelativePath>
            </FilesForPackagingFromProject>
    </ItemGroup>
</Target>

<PropertyGroup>
    <CopyAllFilesToSingleFolderForPackageDependsOn>
        CustomCollectFiles;
        $(CopyAllFilesToSingleFolderForPackageDependsOn);
    </CopyAllFilesToSingleFolderForPackageDependsOn>
</PropertyGroup>