<SharePoint:ScriptLink name="sp.core.js" runat="server" LoadAfterUI="true" Localizable="false" />
<SharePoint:ScriptLink name="~site/Scripts/App.js" runat="server" OnDemand="false" LoadAfterUI="true" Localizable="false"></SharePoint:ScriptLink>
SharePoint uses "SharePoint:CssRegistration" and "SharePoint:CssLink" together to prevent duplication of CSS on the page. All you have to do is to register your CSS using the "SharePoint:CssRegistration" tag. Once registered, there already is a "SharePoint:CssLink" present in the master-page that collects all the registered CSS links and renders them on the page. In case you make a tiniest mistake while registering your CSS, it won't appear on the page. Here is how you can register for the SharePoint-Hosted apps:
<SharePoint:CssRegistration runat="server" Name="<% $SPUrl:~site/Content/App.css%>" After="corev15.css" />
Note that SharePoint adds all the CSS in an alphabetical order based on their file names. To control their order, you have to mention the CSS file "after" which your CSS file should be added. In above example, your CSS file will be rendered after "corev15.css" file. If you don't mention the "After" attribute, your CSS will be added before "corev15.css" since its named "App.css". If you have more than one CSS files you must mention full paths in the "After" attribute such as:
<SharePoint:CssRegistration runat="server" Name="<% $SPUrl:~site/Content/App2.css%>" After="<% $SPUrl:~site/Content/App1.css%>" />
Remember, as mentioned before, "SharePoint:CssLink" is added only once and normally on the master-page. It collects all the registered CSS and adds their links. If your link doesn't appear despite the registration, make sure the "Name" is pointing to an absolute path.