Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/327.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/9/visual-studio/8.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# NuGet缓存和版本控制问题_C#_Visual Studio_Maven_Nuget - Fatal编程技术网

C# NuGet缓存和版本控制问题

C# NuGet缓存和版本控制问题,c#,visual-studio,maven,nuget,C#,Visual Studio,Maven,Nuget,我对NuGet预发布包有问题,我想知道其他人在这种情况下做了什么。NuGet功能似乎与Maven中的预期行为完全不同,坦率地说,很奇怪。举个简单的例子,假设我们有AssemblyFooAssembly和BarAssembly,其类定义如下: 傅: 名称空间Foo{ 班级{ 公共无效遗嘱(){ } } } 酒吧: 名称空间栏{ 类BarClass{ 公共静态void Main(字符串[]args){ FooClass foo=新的FooClass(); foo.TestA(); } } } 当

我对NuGet预发布包有问题,我想知道其他人在这种情况下做了什么。NuGet功能似乎与Maven中的预期行为完全不同,坦率地说,很奇怪。举个简单的例子,假设我们有AssemblyFooAssembly和BarAssembly,其类定义如下:

傅:

名称空间Foo{
班级{
公共无效遗嘱(){
}
}
}
酒吧:

名称空间栏{
类BarClass{
公共静态void Main(字符串[]args){
FooClass foo=新的FooClass();
foo.TestA();
}
}
}
当我构建Foo时,它的版本控制为生成Foo-1.0.0-SNAPSHOT.nupkg。当我将其作为依赖项添加时,NuGet会将其安装到Bar中,并将其放置在%APPDATA%下的本地缓存和源目录树中的packages文件夹中。现在,如果我将TestB()方法添加到Foo并重新生成,它还会生成Foo-1.0.0-SNAPSHOT.nupkg。“我的生成”按预期将此新nupkg文件放入我的%APPDATA%缓存中。但是,当我尝试重建Bar时,NuGet没有检测到%APPDATA%中的nupkg已更改,因此没有可用的新TestB方法。我必须手动删除src/packages文件夹(或者至少是packages中的Foo子目录),它才能从缓存中重新获取包

在Maven中,如果我要用添加的TestB方法重建Foo,它会将Foo-1.0.0-SNAPSHOT放在我的.m2缓存中,Bar会链接到jar的新版本,并了解TestB

我的问题是,首先,我是否在NuGet身上遗漏了什么?其次,如果我不是,人们做了什么来克服这个缺点?是否添加MSBuild预生成步骤以清除项目包缓存?将内部版本号附加到快照的末尾(例如SNAPSHOT42…对于项目中的多个开发人员来说,这似乎是有问题的)

任何见解都值得赞赏。谢谢。

警告:过期 截至2018年,此答案已过时-有关最新信息,请参阅我的

没有与maven快照等效的Nuget NuGet并不像Maven那样真正支持快照依赖项,尽管有一种方法可以实现类似的功能,也有一种方法可以实现类似的功能

建议的一种可能性是编写一个脚本:

  • 生成具有不同版本的新Foo包
  • 更新栏以引用最新版本的Foo
另一种方法
或者,当我处理自己的项目时,我总是从源代码构建和引用
Foo
。然后,一旦
Foo
项目变得足够稳定,我不再对其进行太多更新,我就开始停止通过源代码引用
Foo
,而是将其构建并引用为一个nuget包。

如果在新的csproj文件格式中使用
PackageReference
元素,现在可以使用


对于来自VisualStudio的生成,您需要获取更改。对于非Visual Studio版本,您需要强制更新,如中所述。

这或多或少是我们过去所做的。问题是它不能很好地扩展到非常非常大的系统。