MSBuild 无法从相对路径复制 dll
MSBuild fails to copy dlls from relative path
解决方案目录包含 ExtraDll 和项目目录。
在 Project.csproj 文件中,我们在具有相对路径的 ExtraDll 中引用了 dll。 ExtraDlls 目录下的 Dll 总是可用的。
<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>
使用下面的批处理文件来发布网络项目。但它失败了,下面提到了细节。
SET MSBUILD_PATH="C:\Program Files (x86)\Microsoft Visual Studio19\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 Studio19\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 Studio19\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 Studio19\Professional\MSBuild\Current\Bin\Microsoft.Common.CurrentVersion.targets(1328,5): error MSB3073: " exited with code 1.
已尝试在批处理文件中更改根目录。即当根目录设置为包含 MSBuild.exe 时,仍然会遇到同样的问题。
使用 $(SolutionDir) 更新设置引用没有帮助。
例如$(SolutionDir)..\ExtraDlls\B.dll
还有更多来自 ExtraDlls 的参考,但仅以上两个显示错误。尝试将 project.csproj 文件中的相对路径更改为绝对路径,但仍然出现相同的错误。所以看起来它是从其他地方引用的。
在 project.csproj 文件的 PreBuildEvent 部分添加代码,如果 SolutionDir 不可用则使用 ..\(我猜 visual studio 可以理解)但是 MSBuild 抛出错误或实际上检查以 .\ 开头的不存在的路径。
在使用 MSBuild.exe 命令时传递一个 属性 /属性:SolutionDir="Path to solution file directory" 来解析所有引用并正确复制所有 ExtraDll。
例如
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%
解决方案目录包含 ExtraDll 和项目目录。 在 Project.csproj 文件中,我们在具有相对路径的 ExtraDll 中引用了 dll。 ExtraDlls 目录下的 Dll 总是可用的。
<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>
使用下面的批处理文件来发布网络项目。但它失败了,下面提到了细节。
SET MSBUILD_PATH="C:\Program Files (x86)\Microsoft Visual Studio19\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 Studio19\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 Studio19\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 Studio19\Professional\MSBuild\Current\Bin\Microsoft.Common.CurrentVersion.targets(1328,5): error MSB3073: " exited with code 1.
已尝试在批处理文件中更改根目录。即当根目录设置为包含 MSBuild.exe 时,仍然会遇到同样的问题。
使用 $(SolutionDir) 更新设置引用没有帮助。 例如$(SolutionDir)..\ExtraDlls\B.dll
还有更多来自 ExtraDlls 的参考,但仅以上两个显示错误。尝试将 project.csproj 文件中的相对路径更改为绝对路径,但仍然出现相同的错误。所以看起来它是从其他地方引用的。
在 project.csproj 文件的 PreBuildEvent 部分添加代码,如果 SolutionDir 不可用则使用 ..\(我猜 visual studio 可以理解)但是 MSBuild 抛出错误或实际上检查以 .\ 开头的不存在的路径。
在使用 MSBuild.exe 命令时传递一个 属性 /属性:SolutionDir="Path to solution file directory" 来解析所有引用并正确复制所有 ExtraDll。
例如
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%