MSBuild可以';t将程序集.dll文件复制到$(OutDir)

本文关键字:复制 文件 OutDir dll 程序集 可以 MSBuild | 更新日期: 2023-09-27 18:28:43

正在构建简单的C#项目(其中只定义了一个简单类
没有功能方法)我得到下一个错误消息:

"C:''Program Files(x86)''MBuild''12.0''bin''
Microsoft.Common.CurrentVersion.targets(3528,5):错误MSB3024:
无法复制文件"obj''x86''Debug''G4S_CVisitDescr.dll"
到目标文件"……..''Projects''Server''Debug''G4S_CVisitDescr.dll",
因为目标是文件夹而不是文件
要将源文件复制到文件夹中,请考虑使用DestinationFolder
参数而不是DestinationFiles。"

这个错误消息很奇怪,因为在
的相关片段中.targets文件目的地参数的复制任务只是建议
在消息DestinationFolder中!该片段(其中"<Copy"
行错误消息中指出的编号为3528)如下:

<!-- Copy the build product (.dll or .exe). -->
<Copy
    SourceFiles="@(IntermediateAssembly)"
    DestinationFolder="$(OutDir)"
    SkipUnchangedFiles="$(SkipCopyUnchangedFiles)"
    OverwriteReadOnlyFiles="$(OverwriteReadOnlyFiles)"
    Retries="$(CopyRetryCount)"
    RetryDelayMilliseconds="$(CopyRetryDelayMilliseconds)"
    UseHardlinksIfPossible="$(CreateHardLinksForCopyFilesToOutputDirectoryIfPossible)"
    Condition="'$(CopyBuildOutputToOutputDirectory)' == 'true' and '$(SkipCopyBuildProduct)' !=                 'true'">
    <Output TaskParameter="DestinationFiles" ItemName="MainAssembly"/>
    <Output TaskParameter="DestinationFiles" ItemName="FileWrites"/>
</Copy>

同样奇怪的是,另一个具有相同项目的类似项目
文件和相同的项目属性生成时没有任何错误。"坏"
如果
方法Solution2.SolutionBuild.BuildProject,以前调用
Solution2.SolutionBuild.Clean方法或"OutputPath"属性
在手动调用下具有默认值"bin''x86''Debug"(因为,
在这种情况下可能不进行复制)。

接下来我有两个问题:

1) 我应该如何理解错误以及如何修复(如果可能的话)?

2) 类似项目之间的哪个差异可能导致错误?

任何想法都将不胜感激。

  Lebyko

MSBuild可以';t将程序集.dll文件复制到$(OutDir)

如果您转到您的项目->属性->生成->事件->预构建事件并添加以下两行,即修复问题

if exist "$(TargetPath).locked" del "$(TargetPath).locked"
if exist "$(TargetPath)" if not exist "$(TargetPath).locked" move "$(TargetPath)" "$(TargetPath).locked"