Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 引用dll以及何时将复制本地设置为true_C#_.net_Visual Studio - Fatal编程技术网

C# 引用dll以及何时将复制本地设置为true

C# 引用dll以及何时将复制本地设置为true,c#,.net,visual-studio,C#,.net,Visual Studio,我有几个独立的项目(彼此无关),它们都引用了我创建的dll,我们称之为MyDll 我已经读到,默认情况下,每个引用我的dll的项目都会将复制本地设置为true。所以每个项目都有自己的MyDll副本 如果我重建MyDll,会发生什么情况?所有这些副本会被更新吗?或者我需要重新添加引用吗 将MyDll放在所有项目都引用此文件的一个位置有意义吗?或者这种想法不明智吗?复制本地是使用.dll的项目中的引用属性。 将引用程序集复制到输出文件夹的过程在生成项目时完成。 如果引用的路径设置为项目的输出文件夹,

我有几个独立的项目(彼此无关),它们都引用了我创建的dll,我们称之为MyDll

我已经读到,默认情况下,每个引用我的dll的项目都会将复制本地设置为true。所以每个项目都有自己的MyDll副本

如果我重建MyDll,会发生什么情况?所有这些副本会被更新吗?或者我需要重新添加引用吗


将MyDll放在所有项目都引用此文件的一个位置有意义吗?或者这种想法不明智吗?

复制本地是使用.dll的项目中的引用属性。 将引用程序集复制到输出文件夹的过程在生成项目时完成。
如果引用的路径设置为项目的输出文件夹,则需要重新生成项目。

您可以在公共dll的
生成后事件(项目->属性->构建事件)中添加一些内容。例如,您可以调用一个批处理文件,该批处理文件使用依赖于dll的项目的所有输出文件夹进行更新

if /I "$(ConfigurationName)" == "Release" 
         Call $(SolutionDir)\distribute_library.cmd $(TargetPath) 
(只有一行,为便于阅读,在此处拆分)

其中
distribute_library.cmd
是批处理文件,其中包含将
$(TargetPath)
复制到各个目标的命令

大概是这样的:

D:
COPY %1 \MyProject1\bin\release
....other targets ....

不要忘记:将
运行生成后事件
组合设置为成功生成时的

我更喜欢在不同的项目中将此公共DLL作为源代码项目,并使用源代码版本系统处理对这些项目副本的更新。请记住,如果您更改此通用代码,则需要重新测试依赖项目中的所有内容。这可能会带来惊人的成本,所以我会将MyDll项目添加到每个使用它的项目的解决方案中。与添加对dll的引用相比,这样做的主要优点是什么?好的,好处很大程度上取决于常见dll的类型。例如,对于每个项目,通信库都是相同的,但是实用程序库可能因项目而异。您可以根据项目的需要微调此公共dll。您无需重新测试整个项目集。(想象一下,为了修复一个bug,您需要尽快发布项目,但您的库的新版本尚未针对这个特定项目进行测试)无论如何,我发现这更灵活。这里最基本的是版本控制系统的作用。mydll对于每个项目都是相同的,所以听起来更像您提到的通信库示例。如果我重新生成MyDll,这意味着我必须重新生成引用它的所有项目,然后您可以向MyDll生成后事件命令行添加一些内容。例如,您可以调用一个批处理文件,将重新编译的库复制到所有项目的输出文件夹中。这将确保每个项目都具有最新版本的库,并且忘记“复制本地”的设置。