Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/304.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 4和45项目之间的无缝NuGet版本集成_C#_.net_Visual Studio_Nuget - Fatal编程技术网

C# NET 4和45项目之间的无缝NuGet版本集成

C# NET 4和45项目之间的无缝NuGet版本集成,c#,.net,visual-studio,nuget,C#,.net,Visual Studio,Nuget,我有一个名为ProjectA的类库,目标是4.5。它不一定使用4.5特定的功能。我需要它来构建4.0和4.5程序集。我需要它来生成一个包含两个程序集版本4.0+4.5的NuGet包。它将被另一个同样针对4.5的类库ProjectB使用 我还需要ProjectB做同样的事情,为4.0和4.5构建输出程序集,并创建一个支持这两者的NuGet包 我在ProjectA和ProjectB项目中添加了4.0的其他构建配置: 在ProjectB中,我还将其他依赖项和文件添加到.nuspec文件中,该文件用于定

我有一个名为ProjectA的类库,目标是4.5。它不一定使用4.5特定的功能。我需要它来构建4.0和4.5程序集。我需要它来生成一个包含两个程序集版本4.0+4.5的NuGet包。它将被另一个同样针对4.5的类库ProjectB使用

我还需要ProjectB做同样的事情,为4.0和4.5构建输出程序集,并创建一个支持这两者的NuGet包

我在ProjectA和ProjectB项目中添加了4.0的其他构建配置:

在ProjectB中,我还将其他依赖项和文件添加到.nuspec文件中,该文件用于定义ProjectA中NuGet的依赖项:

ProjectA构建得很好,并生成一个NuGet.nupkg,它包含两个二进制文件,一个用于4.0,另一个用于4.5。当ProjectB使用ProjectA时,它会从ProjectA引入4.5程序集。当ProjectB编译自己的程序集的4.5版本时,一切正常

这就是事情变得棘手的地方。当我切换ProjectB使用它的4.0构建配置时,Visual Studio会告诉我,我对ProjectA的引用是4.5,不能使用ProjectB的4.0构建配置构建

我希望Visual Studio在ProjectB中的构建配置更改为4.0时,自动使用ProjectA中的4.0程序集

我无法将4.5降级到4.0以使一切更加无缝。最终,ProjectC将使用这两个库4.0程序集。因为ProjectC以4.0为目标,无法更改


如何让ProjectB使用ProjectA,以便ProjectB使用ProjectA中正确的程序集4.0/4.5,具体取决于ProjectB使用的构建配置。

经过几个小时的研究,并访问了我的同事和@zbigew的评论,我被引导决定需要更新ProjectB的项目文件。实际上,我必须让项目知道基于项目文件中的条件语句使用哪个引用,对于ProjectA的二进制文件4.0/4.5的两个不同/独立引用

本节帮助定义与项目关联的引用。根据各种条件,可以将其本身设置为可选。在我的例子中,我必须设置一个条件,即如果构建配置是Release40,则使用。另一个参考说明是,如果构建配置是发行版,请使用来自不同版本的4.5程序集


您可以尝试创建两种不同的配置,一种用于.net 4.0,另一种用于.net 4.5,然后在csproj中使用条件引用。示例:@zbignew谢谢。你的评论帮了大忙。我还得想办法创建两个不同的引用,这似乎是成功的。我对你的评论投了赞成票。如果您将此作为包含更多详细信息的答案提交,请随意窃取我的答案,我将很高兴标记您的答案。没问题,我将标记您的答案,因为它包含所有详细信息。很高兴知道您已解决此问题,感谢您的分享。您可以将其标记为答案: