You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何将引用项目B中的指定DLL发布至引用项目的App_Data文件夹

解决将项目B中的DLL发布到项目A的App_Data文件夹的方法

我之前也碰到过一模一样的问题——单纯靠调整文件的生成操作和「复制到输出目录」属性,确实搞不定跨项目的DLL定向发布需求。试试下面这几个靠谱的办法:

方法一:用Post-build事件直接复制

这是最直接的方案,给项目B加个构建后事件,把目标DLL主动拷贝到项目A的App_Data目录,同时确保发布时能带上:

  1. 右键项目B → 属性 → 生成事件 → 编辑「Post-build事件命令行」
  2. 输入类似这样的命令(记得替换成你的实际文件名和路径):
xcopy "$(TargetDir)YourTargetDll.dll" "$(SolutionDir)ProjectA\App_Data\" /Y /R

参数说明:

  • $(TargetDir):项目B编译后输出文件的目录,是VS内置的宏变量,不用手动写绝对路径
  • $(SolutionDir):你的解决方案根目录,同样是内置宏,适配不同环境
  • /Y:覆盖现有文件时不弹出提示
  • /R:强制覆盖只读文件

之后还要在项目A里把App_Data里的这个DLL「添加为现有项」,然后设置它的属性:

  • 生成操作:内容
  • 复制到输出目录:如果较新则复制

方法二:通过MSBuild脚本控制发布行为

如果Post-build事件不够灵活,直接修改项目A的.csproj文件,添加自定义MSBuild任务,确保发布时自动把DLL拷贝到指定位置:

  1. 右键项目A → 卸载项目 → 编辑项目A的.csproj文件
  2. 在文件末尾的</Project>标签前,插入这段脚本(替换文件名和路径):
<Target Name="CopyDllToAppDataOnPublish" AfterTargets="Publish">
  <Copy
    SourceFiles="$(SolutionDir)ProjectB\bin\$(Configuration)\YourTargetDll.dll"
    DestinationFolder="$(PublishDir)App_Data\"
    OverwriteReadOnlyFiles="true"
    SkipUnchangedFiles="false"
  />
</Target>

这样每次发布项目A时,MSBuild都会自动把项目B的目标DLL复制到发布目录的App_Data文件夹里。

方法三:调整项目引用的依赖配置

先检查项目A对项目B的引用设置,确保基础依赖没问题:

  • 右键项目A的引用列表 → 选中项目B → 查看属性
  • 确认「复制本地」设置为True(这个默认会把DLL复制到项目A的bin目录,之后再结合上面的方法把bin里的DLL移到App_Data即可)

另外要注意:如果用Visual Studio的Web Deploy发布,要在发布配置的「文件发布选项」里勾选「保留额外的文件(在目标位置)」,确保App_Data文件夹和里面的文件不会被发布过程忽略。

内容的提问来源于stack exchange,提问作者Dennis van Gils

火山引擎 最新活动