当前位置: 首页 > 知识库问答 >
问题:

MSBuild无法从相对路径复制DLL

融宏伟
2023-03-14

解决方案目录包含ExtraDlls和项目目录。在Project.csproj文件中,我们在ExtraDlls中有相对路径的dlls引用。ExtraDlls目录中的Dlls总是可用的。

<Reference Include="xyx, Version=7.3.0.0, Culture=neutral, PublicKeyToken=<sometoken>">
      <SpecificVersion>False</SpecificVersion>
      <HintPath>..\ExtraDlls\A.dll</HintPath>
    </Reference>
<Reference Include="xyz, Version=7.4.0.0, Culture=neutral, PublicKeyToken=<sometoken>">
      <SpecificVersion>False</SpecificVersion>
      <HintPath>..\ExtraDlls\B.dll</HintPath>
      <Private>True</Private>
    </Reference>

使用下面的批处理文件发布web项目。但由于以下提到的细节,它失败了。

SET MSBUILD_PATH="C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\MSBuild\Current\\Bin"
SET PUBLISH_DIRECTORY="C:\publish\ProjectA"
SET PROJECT_DIR="C:\SolutionDir\ProjectDir"
SET PROJECT="C:\SolutionDir\ProjectDir\Project.csproj"
cd %PROJECT_DIR%

%MSBUILD_PATH%\MSBuild.exe %PROJECT%  /p:DeployOnBuild=True /p:DeployDefaultTarget=WebPublish /p:WebPublishMethod=FileSystem /p:DeleteExistingFiles=True /p:publishUrl=%PUBLISH_DIRECTORY%

PreBuildEvent:

        copy "..\ExtraDlls\A.dll" "C:\SolutionDir\ProjectDir\bin\"
        copy "..\ExtraDlls\B.dll" "C:\SolutionDir\ProjectDir\bin\"

  The system cannot find the path specified.
  The system cannot find the path specified.

C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\MSBuild\Current\Bin\Microsoft.Common.CurrentVersion.targets(1328,5): error MSB3073:       copy "..\ExtraDlls\A.dll" "C:\SolutionDir\ProjectDir\bin\" [C:\SolutionDir\ProjectDir\Project.csproj]

C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\MSBuild\Current\Bin\Microsoft.Common.CurrentVersion.targets(1328,5): error MSB3073:       copy "..\ExtraDlls\B.dll" "C:\SolutionDir\ProjectDir\bin\" [C:\SolutionDir\ProjectDir\Project.csproj]

C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\MSBuild\Current\Bin\Microsoft.Common.CurrentVersion.targets(1328,5): error MSB3073:     " exited with code 1.

已尝试更改批处理文件中的根目录。i、 e.当根目录设置为包含MSBuild的根目录时。exe,还是同样的问题。

设置用$(SolutionDir)更新的引用没有帮助。e、 g.$(解决方案目录)。。\extralls\B.dll

Extradll中还有更多的引用,但只显示了以上两个的错误。尝试在项目中将相对路径更改为绝对路径。csproj文件,但仍然存在相同的错误。看起来它是从其他地方引用的。

共有1个答案

崔棋
2023-03-14

在project.csproj文件中,在PreBuild事件部分添加了代码,如果SolutionDir不可用,则使用...\(我猜视觉工作室可以理解),但MSBuild抛出错误或实际上检查以.\开头的路径。\不存在。

在使用MSBuild时。exe命令传递一个property/property:SolutionDir=“解决方案文件目录路径”,它解析所有引用,现在正确复制所有外部DLL。

例如

MSBuild /Property:SolutionDir=%SOL_DIR_PATH% %PROJECT_SLN_PATH%\%PROJECT_DIRECTORY_NAME%\%PROJECT_NAME%  /p:DeployOnBuild=True /p:DeployDefaultTarget=WebPublish /p:WebPublishMethod=FileSystem /p:DeleteExistingFiles=True /p:publishUrl=%PUBLISH_DIRECTORY%\%PROJECT_DIRECTORY_NAME%
 类似资料:
  • 我的dockerfile中有以下行 当我尝试使用docker-comment构建图像时,我得到了 服务前端构建失败:lstat /root/url.net/volumes/persistent/url/root:没有这样的文件或目录 我可以从任何地方cd到根目录。net/volumes/persistent/url/root在我的机器上没有问题。 如何在dockerfile中指定文件夹的绝对路径?

  • 问题内容: 如果使用绝对路径,则无法将整个目录移动到新位置。如果使用相对路径,则无法将单个文件移动到新位置。 这里有什么解决方案?您是否设置了一个包含根路径并从那里开始的配置文件?还是您有类似的规则:永不移动文件? 我在某些项目中看到人们使用dirname( FILE )。我的意思是,为什么不简单地将其删除,因为目录名还是相对的(取决于文件所在的位置)? 问题答案: 您应该使用一个配置文件,该配置

  • 问题内容: 键入标题时,我注意到有关此问题的一些类似问题,但它们似乎不在PHP中。那么用PHP函数解决该问题的方法是什么? 待指定。 有什么好主意吗?谢谢。 问题答案: 试试这个: 这将给 和 和 和

  • 主要内容:什么是当前工作目录,什么是绝对路径与相对路径,Python处理绝对路径和相对路径在介绍绝对路径和相对路径之前,先要了解一下什么是当前工作目录。 什么是当前工作目录 每个运行在计算机上的程序,都有一个“当前工作目录”(或 cwd)。所有没有从根文件夹开始的文件名或路径,都假定在当前工作目录下。 注意,虽然文件夹是目录的更新的名称,但当前工作目录(或当前目录)是标准术语,没有当前工作文件夹这种说法。 在 Python 中,利用 os.getcwd() 函数可以取得当前工作路径的字

  • 在 Linux 中,简单的理解一个文件的路径,指的就是该文件存放的位置,例如,在《 Linux文件系统的层次结构》中提到的 /home/cat 就表示的是 cat 文件所存放的位置。只要我们告诉 Linux 系统某个文件存放的准确位置,那么它就可以找到这个文件。 指明一个文件存放的位置,有 2 种方法,分别是使用 绝对路径和 相对路径。 我们知道,Linux 系统中所有的文件(目录)都被组织成以根

  • 在dockerfile中,有相同的方法将copy命令与相对路径一起使用吗?我正在尝试使用: OBS。:我的结构文件夹(我在项目测试上运行dockerfile,另一个文件在项目控制台文件夹中)是: |-项目控制台 |-项目测试 Im收到以下错误: 错误:服务“app”无法生成:复制失败:未指定源文件。 我的目的是在同一个docker中有两个项目。我有一个dotnet核心控制台和另一个带有unity测