Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/337.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.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# 参考文献.NET_C#_.net_Dll_Reference - Fatal编程技术网

C# 参考文献.NET

C# 参考文献.NET,c#,.net,dll,reference,C#,.net,Dll,Reference,我有一个项目(A)将开发一个记录器系统。此项目将用于其他项目。在项目A中,有两个引用没有在编译时使用 当我将任何项目中的引用添加到项目a时,不会导入引用,但我需要在运行时使用它们 我看到了两种解决方案: a) 使用伪代码在编译时强制复制。这个解决方案似乎不雅观 b) 在其他项目中添加引用。此解决方案强制始终引用DLL 有没有办法强制复制引用 非常感谢考虑为您的项目制作一个包。NuGet包可以提供运行时所需的库,并将它们添加到目标项目中(尽管我认为您可能需要使用脚本来实现这一点) 然后,您可以在目

我有一个项目(A)将开发一个记录器系统。此项目将用于其他项目。在项目A中,有两个引用没有在编译时使用

当我将任何项目中的引用添加到项目a时,不会导入引用,但我需要在运行时使用它们

我看到了两种解决方案:

a) 使用伪代码在编译时强制复制。这个解决方案似乎不雅观

b) 在其他项目中添加引用。此解决方案强制始终引用DLL

有没有办法强制复制引用

非常感谢

考虑为您的项目制作一个包。NuGet包可以提供运行时所需的库,并将它们添加到目标项目中(尽管我认为您可能需要使用脚本来实现这一点)

然后,您可以在目标项目中使用“管理NuGet引用”来添加“项目A”,并让NuGet安装脚本添加“仅运行时”库引用


请记住,您可以在内部托管您自己的NuGet软件包,它们不需要发布到在线库。我们对内部共享项目使用这种方法,因为它使依赖关系管理和版本控制非常简单和合理,并且在源代码管理过程中保持每个项目的严格范围。

尝试更改项目A中指定引用的py本地属性

编辑此案例的解决方案:


如果在编译时没有使用这些引用,那么应该 将特定dll文件(添加现有项)作为内容添加到生成中 操作,并使用“始终复制”选项(在项目A中)。当项目 获取构建时,这些文件将成为构建输出。通过这种方式,您可以 访问引用项目A的其他项目中的文件


可以使用反射在运行时加载程序集:

 Assembly assembly = Assembly.LoadFile(path);

 Type t = assembly.GetType("YourClassName");

 object instance = Activator.CreateInstance(t);

 int parameter1 = 1;

 object result = t.GetMethod("The MethodName").Invoke(instance, new object[] { parameter1, "Something" });

不过有点麻烦。

也许可以尝试解决问题的根源-为什么不添加对实际使用它们的项目的引用?

在生成操作后使用visual studio编译器将dll复制到运行时或dll目录是另一种解决方案。例如,这是使用prism时的常见做法。它显示了现在,您只需要复制文件。您只需使用project+添加现有项将其添加到项目中,并将其“复制到输出目录”属性设置为“如果较新,请复制”“。如果您不喜欢混乱,那么在生成后事件中使用XCOPY/d也可以。很抱歉,在其他项目中添加dll作为引用有什么问题?问题是关于知识。如果我指的是组件A,那么当从项目B中指代它时,我是否需要知道组件A需要哪些其他组件才能正常工作?如果我已经将应用程序分为数据访问层、业务逻辑层、用户界面层,为什么我需要为用户界面层添加引用,以确保包含数据访问层所需的所有必要程序集?我为什么要这么做?我应该只需要添加对我的业务逻辑层的引用,并自动带来依赖项。Copy Local为true,它是在项目a的bin中生成的。但它不会出现在项目BIf中。如果在编译时未使用这些引用,则应添加特定的dll文件(添加现有项),作为构建操作中的内容,并使用“始终复制”选项(在项目A中)。当项目获得构建时,这些文件将成为构建输出。通过这种方式,您可以访问引用project ANaumand的其他项目的文件,这是一个很好的解决方案!!我可以将其添加为现有项。非常感谢。