我有一个针对.NET 4.6和通用Windows平台的可移植类库项目.这个类库只包含一个类,其构造函数中包含以下代码行:
Directory.CreateDirectory(Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString()));
Run Code Online (Sandbox Code Playgroud)
现在,我在同一解决方案中创建一个新的.NET 4.6控制台应用程序项目,并向可移植类库添加项目引用.调用包含上述代码行的方法会在运行时导致以下异常:
Could not load file or assembly 'System.IO.FileSystem, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The system cannot find the file specified.
Run Code Online (Sandbox Code Playgroud)
我在这做错了什么?没有编译时错误或警告.
似乎System.IO.FileSystem是一个通过NuGet提供的库,作为Microsoft.NETCore mega-package的一部分.好吧,也许我需要将这个包明确地添加到任何使用我的可移植类库的项目中.我试图这样做.
Could not install package 'Microsoft.NETCore.Platforms 1.0.0'. You are trying to install this package into a project that targets '.NETFramework,Version=v4.6', but the package does not contain any assembly references or content files that are compatible with that framework. For more information, contact the package author.
Run Code Online (Sandbox Code Playgroud)
这种方法没有运气.
虽然网上没有明确的信息,但我读了一些关于基于NuGet线束或构建系统的新project.json的花絮.为了实验,我在控制台应用程序项目中创建了以下project.json文件:
{ …Run Code Online (Sandbox Code Playgroud) nuget portable-class-library visual-studio-2015 .net-4.6 project.json
我们假设我正在对我的数据库进行某种非常重要的更改,这需要"自定义"工作从版本A升级到B.例如,将用户ID列从UUID数据类型转换为Windows域用户名.
如何使其自动部署?也就是说,我想允许开发人员右键单击项目,单击"Deploy"并在他们使用足够老的数据库时执行此逻辑.
我没有在数据库项目中看到任何此类登录的位置 - 似乎没有任何此类"升级脚本"的规定.这真的不可能吗?为了澄清,逻辑显然不能自动生成,但我希望它根据需要自动执行.
当然,第一个逻辑障碍是部署实用程序不知道是否需要更新任何此类逻辑 - 我假设我也可以为此提供逻辑(例如,检查版本表以及是否最新version <5.0,执行此升级,稍后添加新版本行).
这可能吗?我可以使用复杂的自定义更改脚本进行全自动部署吗?没有我必须将我的所有自定义更改逻辑都粘贴到(即将成为)巨大的构建前或构建后脚本中,当然......
sql-server database-project database-versioning visual-studio
如何以现代通用方式打包具有以下属性的 .NET 库?
这是一系列问题和解答,记录了我对现代 NuGet 包创作主题的发现,特别关注 NuGet 3 引入的更改。您可能还对一些相关问题感兴趣:
我没有做过任何大型游戏开发项目,只是搞乱了小玩具项目.但是,我从未找到对特定设计问题的直观答案.也就是说,如何在游戏中建模不同类型/状态的UI?例如菜单是如何表示的?它与"游戏世界"状态有何不同(让我们以FPS为例).如何在"游戏世界"之上叠加菜单?
让我们想象一下游戏的主循环.游戏状态在哪里发挥作用?这是一个简单的逐案处理方法吗?
if (menu.IsEnabled) menu.Process(elapsedTime);
if (world.IsEnabled) world.Process(elapsedTime);
if (menu.IsVisible) menu.Draw();
if (world.IsVisible) world.Draw();
Run Code Online (Sandbox Code Playgroud)
或者菜单和世界代表在不同的逻辑层中的某个地方而不是在这个级别上表示?(例如,菜单只是另一个高级实体,例如玩家输入或敌方经理,等于所有其他人)
foreach (var entity in game.HighLevelEntities) entity.Process(elapsedTime);
foreach (var entity in game.HighLevelEntities) entity.Draw(elapsedTime);
Run Code Online (Sandbox Code Playgroud)
这有着众所周知的设计模式吗?想一想,我不知道任何特定于游戏的设计模式 - 我还假设还有其他设计模式?请告诉我他们.
我试图暴露一个IQueryable<>over ASP.NET Web API,我发现在请求完成之前我需要保持数据源处于打开状态,这样ASP.NET Web API中内置的OData查询系统就能完成它的工作.
好的,这听起来很合理.但是我在哪里处理数据源?我没有看到任何明显的地方.我应该在应用程序中管理请求状态吗?这样做的标准方法是什么?
Dispose()控制器的方法是否合适?即是否保证一个控制器实例仅提供一个请求,或者只是一个实现细节?
我正在使用ASP.NET MVC 4 RC中的ASP.NET Web API.
我正在生成有关用户操作的日志记录.出于隐私原因,这些需要在N天后进行匿名处理.但是,我还需要针对此匿名数据运行报告.
我希望真实用户A的所有操作都在匿名日志中的假用户X下列出 - 一个用户的记录仍必须保留日志中一个(假的)用户的记录.这显然意味着我需要在真实用户和假用户之间进行一些映射,我在匿名化新记录时会使用这种映射.当然,这完全违背了匿名化的要点 - 如果有映射,则可以恢复原始用户数据.
例:
用户FrankMüller买了3罐汤.
三天后,用户FrankMüller要求退还3罐汤.
当我对第二个日志条目进行匿名化时,第一个日志条目已经被匿名化了.我仍然希望两个日志记录都指向同一个用户.嗯,这在实践中对我来说几乎是不可能的,所以我想使用一些分割数据的方法,希望能让我在数据中保持尽可能多的完整性.也许使用日志作为数据仓库 - 将所有内容分解为事实并接受无法分析某些维度的事实?
你以前遇到过这种情况吗?我有什么选择?我显然需要做出某种妥协 - 事实证明对你有效吗?如何充分利用这些数据?
nuget ×2
.net ×1
.net-4.6 ×1
.net-core ×1
asp.net ×1
dispose ×1
foreign-keys ×1
logging ×1
privacy ×1
project.json ×1
sql-server ×1
uwp ×1