在我的C#项目中有APIKeys.cs文件,其中包含带有API密钥的const字符串.我希望这些字符串在Git服务器中是空的,但在我的本地计算机中有实际的API密钥.所以拉动项目的人可以毫无问题地编译它,而我的本地计算机仍然可以在同一个文件中使用API密钥.
如果我尝试上传带有空字符串的APIKeys.cs文件,那么我就不能拥有带有API密钥的本地文件,因为当我尝试推送它时,它将覆盖空的APIKeys.cs文件.此外,我也不能忽略此文件,因为它将从Git服务器中删除空的APIKeys.cs文件.
那么什么是这个问题的最佳自动化方法,它允许在服务器中使用空字符串的类文件,所以当人们拉动它并在本地计算机中拥有真正的类文件时,项目是可编译的?
Ed *_*ess 10
接受您无法在公共空间中隐藏未加密的私钥.
您可以做的是将密钥移动到私有空间,然后从代码中引用该私有空间.
您的私有空间可能是环境变量或Windows注册表,它应该是应用程序源代码之外的内容.
另一种方法是创建keys.config专门用于存储私钥的新配置文件(例如),然后从源控件中排除该文件.
这意味着您不共享您的私钥,但这也意味着您需要记录(可能在readme.md中)用户需要重新创建自己的私钥keys.config.更好的(感谢@Joey)是keys.sample.config在解决方案中包含一个示例配置文件(),说明需要什么.
Jae*_*aex 10
我现在想出另一个解决方案,这个解决方案并不完美,但对我来说仍然足够好,例如:
APIKeys.cs 文件:
public static partial class APIKeys
{
public static readonly string ImgurClientID = "";
public static readonly string ImgurClientSecret = "";
public static readonly string GoogleClientID = "";
public static readonly string GoogleClientSecret = "";
public static readonly string PastebinKey = "";
...
}
Run Code Online (Sandbox Code Playgroud)
APIKeysLocal.cs 文件:
public static partial class APIKeys
{
static APIKeys()
{
ImgurClientID = "1234567890";
ImgurClientSecret = "1234567890";
GoogleClientID = "1234567890";
GoogleClientSecret = "1234567890";
PastebinKey = "1234567890";
...
}
}
Run Code Online (Sandbox Code Playgroud)
忽略APIKeysLocal.csGit中的文件,如果从解决方案资源管理器中删除此文件,那么没有此文件的人仍然可以编译项目.
APIKeysLocal.cs如果使用项目预构建事件尚未存在,我还会自动创建空文件:
cd $(ProjectDir)APIKeys\
if not exist APIKeysLocal.cs (
type nul > APIKeysLocal.cs
)
Run Code Online (Sandbox Code Playgroud)
这样,用户无需做任何事情就可以编译项目.