gpt4 book ai didi

c# - MSBuild 要求将 DLL 复制到 .NET 目录和当前构建目录

转载 作者:太空宇宙 更新时间:2023-11-03 15:55:18 25 4
gpt4 key购买 nike

我不仅在寻找一种更简洁的方法来执行此操作,而且还找出为什么我目前正在做的事情有效...

我正在使用 MSBuild(不是 Visual Studio,只是 Notepad++ 并通过命令行调用 MSBuild)。 MSBuild 需要一个项目文件(就像 Visual Studio 一样)来指导构建过程。作为构建的一部分,我在项目文件中使用 .NET 的 UsingTask 调用 C# 文件,以对数据库进行适当的更改。这样,当我在新计算机上安装它时,我只需要运行 MSBuild,构建将为我更新数据库。

C# 代码使用第三方 DLL。为了访问该 DLL,我需要将它从静态位置(例如 D:\ThirdParty\MyDLL.dll)复制到当前构建目录。那部分很好。奇怪的是,它需要我将 DLL 复制到 C:\Windows\Microsoft.NET\Framework\v4.0.30319。如果我将 DLL 复制到 当前构建目录 C:\Windows\Microsoft.NET\Framework\v4.0.30319 而不是其他,那么它不会建立。如果我将它复制到两个 目录,只有这样它才能工作。

以下是我的代码的重要部分:

定义 UsingTask

<UsingTask
TaskName="UpdateDB"
TaskFactory="CodeTaskFactory"
AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v4.0.dll" >
<ParameterGroup />
<Task>
<Reference Include="System.Data" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="System.Data.Linq" />
<Reference Include="MyDLL.dll" />
<Reference Include="System.Xml" />
<Using Namespace="MyDLL.Db.Foo" />
<Code Type="Class" Language="cs" Source="UpdateDB.cs" />
</Task>
</UsingTask>

复制 DLL...

<Copy
SourceFiles="D:\ThirdParty\MyDLL.dll"
DestinationFolder="$(MSBuildToolsPath)"
/>
<Copy
SourceFiles="D:\ThirdParty\MyDLL.dll"
DestinationFolder="$(MSBuildProjectDirectory)"
/>

调用上面定义的Usi​​ngTask...

<UpdateDB />

所以我想知道为什么我需要将 DLL 复制到两个位置,而不只是一个或另一个。我通过从两个目录中删除 DLL 并将其复制到其中一个目录来一遍又一遍地测试它。仅当我将 DLL 复制到两者时它才有效。是否有更简洁的方法来执行此操作?如果没有,为什么会这样?

最佳答案

请你试试这个:-在项目目录下创建一个目录“libraries”将第三方 dll 复制到该文件夹​​

<Copy
SourceFiles="D:\ThirdParty\MyDLL.dll"
DestinationFolder="$(MSBuildProjectDirectory)\libraries"
/>

不要复制到C:\Windows\Microsoft.NET\Framework\v4.0.30319

在任务中

<reference include="libraries\MyDll.dll">

然后尝试执行你的程序,让我知道发生了什么

关于c# - MSBuild 要求将 DLL 复制到 .NET 目录和当前构建目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23918413/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com