Dan*_*ele 10 reference visual-studio nuget
我有一个非常奇怪的错误,我没有解释.
所以我的设置非常简单:
我有一个包含2个项目的解决方案,我们将它们命名为ProjectA和ProjectB. ProjectA引用了一些NuGet包,如果构建ProjectA,我可以看到输出目录中的所有程序集,bin文件夹. ProjectB现在引用ProjectA,但是如果我构建ProjectB,我在输出目录中有ProjectA程序集,而不是ProjectA引用的NuGet包.
从ProjectB到ProjectA的引用添加了引用 - >添加引用... - >解决方案 - > ProjectA.
我还创建了一个涵盖这个案例的小测试项目,但它在我的测试项目中运行得很好.
有任何想法吗?
dea*_*dog 17
对于示例场景,假设我们有项目X,程序集A和程序集B.程序集A引用程序集B,因此项目X包含对A和B的引用.此外,项目X包含引用程序集A的代码(例如A. SomeFunction()).现在,您创建一个引用项目X的新项目Y.
所以依赖链看起来像这样:Y => X => A => B.
Visual Studio/MSBuild试图变得聪明,只将引用引入它检测为项目X所需的项目Y; 这样做是为了避免项目Y中的参考污染.问题是,由于项目X实际上不包含任何明确使用程序集B的代码(例如B.SomeFunction()),VS/MSBuild不会检测到B是必需的通过X,因此不会将其复制到项目Y的bin目录中; 它只复制X和A程序集.
您有两个选项可以解决此问题,这两个选项都会导致程序集B被复制到项目Y的bin目录中:
我个人更喜欢选项2,原因有两个.
以下是我在遇到这种情况时通常会添加的"虚拟代码"示例.
// DO NOT DELETE THIS CODE UNLESS WE NO LONGER REQUIRE ASSEMBLY A!!!
private void DummyFunctionToMakeSureReferencesGetCopiedProperly_DO_NOT_DELETE_THIS_CODE()
{
// Assembly A is used by this file, and that assembly depends on assembly B,
// but this project does not have any code that explicitly references assembly B. Therefore, when another project references
// this project, this project's assembly and the assembly A get copied to the project's bin directory, but not
// assembly B. So in order to get the required assembly B copied over, we add some dummy code here (that never
// gets called) that references assembly B; this will flag VS/MSBuild to copy the required assembly B over as well.
var dummyType = typeof(B.SomeClass);
Console.WriteLine(dummyType.FullName);
}
Run Code Online (Sandbox Code Playgroud)
Osc*_*das 13
如果依赖关系图比您描述的更复杂,则可能存在一些版本问题.
"X,Version = 2,Culture = neutral,PublicKeyToken = null"和"X,Version = 1,Culture = neutral,PublicKeyToken = null"之间存在冲突.
选择"X,Version = 2,Culture = neutral,PublicKeyToken = null"是因为它是主要的并且"X,Version = 1,Culture = neutral,PublicKeyToken = null"不是.
归档时间: |
|
查看次数: |
7369 次 |
最近记录: |